2017-02-01 4 views
3

私は角2のテスト(カルマ、ジャスミン)を学んでいます。私は既にHTTPサービスのための動作テストを持っています。これは主にthis Semaphore tutorial on services and testingから取得しました。私はいつもの非同期を通じて正しく動作テストを持っている(([MyServiceでは]、...角2は別のサービスを呼び出す非同期サービスを嘲笑します

私の実際のプログラムは以下のように、サービスに包まれたサービスを提供しています。

@Injectable() 
export class GlobalsService { 
    private options: Option[] = []; 
    error: any; 

    constructor(private optionService: OptionService) { } 

    public getGlobals(): void { 
    let that = this; 
    this.optionService 
     .getOptions() 
     .then(options => that.fillOptions(options)) 
     .catch(error => that.error = error); 
    } 
    [SNIP] 

optionService.getOptionsを(注入)隠されている、待っている約束を返し、次にglobalService.optionsリストを埋める。globalsService.getGlobals()同期またはその内容の非同期(遅延)を満たす場所で呼び出される。

export class AppComponent implements OnInit { 
    constructor(private globalsService: GlobalsService) { } 

    ngOnInit() { 
    this.globalsService.getGlobals(); 
    } 
    [SNIP] 

私が悩んでいるのは、globalsSerを呼び出す方法です。テストコンテキストでvice.getGlobals()。私はasync()を通してそれを呼び出すと思います。私のモックOptionServiceがある

は、これまでのところ:

@Injectable() 
export class MockOptionService { 
    constructor() { } 

    getOptions(): Promise<Option[]> { 
    let options: Option[] = [ 
     { id: 'NY' } // truncated property list 
    ]; 
    return Promise.resolve(options); 
    } 

} 

私はそれを介してコールすることを計画しています:

it('should get Option objects async', 
    async(inject([GlobalsService, MockOptionService], (globalsService: GlobalsService, optionService: OptionService) => { 

     globalsService.getGlobals() 
     .then(() => { 
      expect(globalsService.getOptions().length).toBe(1); 
     });  

をしかし、私の "スマート" プログラマーエディタ(SublimeText)は、その「プロパティ 'と言います'' void '型には存在しません。非同期(インジェクトまたはちょうどダンプ()を使用する必要があるかどうかわかりません)

コメント、誰?

ありがとう、 Jerome。

答えて

0

試してみてください!私のテストが間違っている* :

it('should get Option objects async', 
async(inject([GlobalsService, MockOptionService], (globalsService: GlobalsService, optionService: OptionService) => { 

    globalsService.getGlobals() 
    .do(value => { 
     expect(value.length).toBe(1); 
    }).toPromise(); 
}))); 
+0

。私の答えは以下を見てください。 –

0

は周りいじるとより多くの研究の後、私は二つのことを考え出しました。 globalsService.getGlobals()はvoidを返します。 .then、または.doは、 "プロパティは存在しません"という意味で正しいです。私は非同期の変更、テスト作業は、セットアップ句を追加されていることを確認するために何が変わった

(注入(注射剤との宣言をに修復します(fakeAsyncに(注入ここでどのような作品です。

describe('Globals Service',() => { 

    beforeEach(() => { 

    TestBed.configureTestingModule({ 
     providers: [ 
     { provide: OptionService, useClass: MockOptionService }, 
     { provide: GlobalsService, useClass: GlobalsService } 
     ] 
    }); 
    }); 

    fakeAsync(inject([GlobalsService, OptionService], (globalsService: GlobalsService, optionService: OptionService) => { 
     globalsService.getGlobals(); 
     tick(); 
     expect(globalsService.getOptions().length).toBe(1); 
    }))); 

}); 

おかげですべての。探して、そしてNidhinへの返信のために今、私は私のエラー()の処理に取り組む - 。。handleErrorの(中ヌルエラー変数を報告している)しかし、それは異なるサポートコールのためである

ジェローム

関連する問題