テストするコンポーネントのテスト(仕様)ファイルを作成しました。しかし、テストを実行すると、エラーが表示されます
Cannot read property 'subscribe' of undefined
TypeError: Cannot read property 'subscribe' of undefined
at ComponentUndertest.ngOnInit
ngOnInit()メソッドで何かにサブスクライブしているのは明らかですが、テスト中にサブスクリプションを無視できますか?または、テスト中にサブスクリプションを偽造できますか?私はこの問題について多くのことをグーグルで調べましたが、angular2テストに関連するものは見つかりませんでした。前もって感謝します。
たとえば、オブザーバブルを返すメソッドを持つサービスがあるとします
class SomeService {
getData(): Observable<Data> {}
}
Noopサブスクライブ関数でオブジェクトを返すspy1を作成します。
let mockSomeService = {
getData: () => {}
}
TestBed.configureTestingModule({
providers: [
{ provide: SomeService, useValue: mockSomeService }
]
})
it('...', () => {
spyOn(mockSomeService, 'getData').and.returnValue({ subscribe: () => {} })
// do stuff
expect(mockSomService.getData).toHaveBeenCalled();
})
スパイで実際のオブザーバブルを返します
spyOn(mockSomeService, 'getData').and.returnValue(Observable.of(someData))
サービスの呼び出しがコンポーネント内の何かを変更している場合、これはおそらくテストする必要があるため、noop subscribeメソッドよりもこれが優先されるでしょう。
この投稿 のようなことをしてください。これは個人的に私が普段行っていたものです。それは好みの問題です。
1- スパイの詳細を参照