私はangle2アプリケーションを作成していますが、ジャスミンを使って非同期コードのテストを書く方法を理解できません。どんな理由であれ、私の状況にはあまりにも多くの例が見えることはありません。ジャスミンを使ったAngular2非同期ユニットテスト
私は現在、別のサービスに非同期依存性を持つサービス(コンポーネントではありません)をテストしようとしています。私は、非同期呼び出しの結果をチェックするのに有効なテストのどの時点で100%確実ではない。サービスの非同期ハンドラの内部でexpect()
に電話するだけですか?
service.foo()
.then((data) => {
//do I check the results in here?
expect(data).toEqual({ a: 1, b: 2 });
expect(mockDep.get).toHaveBeenCalled();
});
これは完全なテストです。
import { TestBed, inject } from '@angular/core/testing';
import { MyService } from './my.service.ts';
import { MyDependency } from './dependency.service.ts';
class MockDependency {
doSomething(): Promise<any> {
throw Error('not implemented');
};
}
describe('some tests',() => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
MyService,
{
provide: MyDependency, useClass: MockDependency
}
]
});
});
});
it('should do something', inject([MyService, MyDependency], (service: MyService, mockDep: MyDependency) => {
spyOn(mockDep, 'doSomething').and.callFake(function() {
return Promise.resolve({ a: 1, b: 2 });
});
service.foo()
.then((data) => {
//do I check the results in here?
expect(data).toEqual({ a: 1, b: 2 });
expect(mockDep.get).toHaveBeenCalled();
});
}));
はい、通常は 'expect'を' then'に入れます。非同期テストでは、 'async'または' fakeAsync'で 'inject'をラップする必要があります。 – estus