0
は今、私は以下のようにこのような状況のためのユニットテストを書いています:角度2でフィルタを使用してサブスクライブ関数の単体テストを書く方法は?
public div: HTMLDivElement;
public currentEvent: EventType;
public listenToRender() {
this.adsService.render.filter((event: EventType) => {
return this.div.id === event.slot.getSlotElementId();
}).subscribe((event: EventType) => {
let custom_event = new CustomEvent('render', {
detail: event
});
this.currentEvent= event;
});
}
をユニットテストの間に、私は主題でレンダリングモックが、私はそれを渡すことができますかわかりませんフィルタ
return this.div.id === event.slot.getSlotElementId();
サブスクライブ機能に移動します。
class MockAdsService {
render = new Subject();
}
class MockEventType {
name: 'test_event';
slot: {
getSlotElementId = function() {return 'test_id'}
};
}
describe('test',() => {
let mockAdsService: MockAdsService,
mockEventType: MockEventType;
beforeEach(() => {
mockAdsService = new MockAdsService();
mockEventType = new MockEventType();
});
it('listenToRender fired correctly',() => {
mockAdsService.render.next(mockEventType);
component.listenToRender();
expect(component.currentEvent).toEqual(mockEventType);
});
});
フィルタを通過させるためにsubject.nextに何かを設定する必要はありますか?
は 'spyOn'の代わりに、' subject'を使用する方がよいかもしれません。 'spyOn(service.render、 'filter')と.returnValue(Observable.of(expected_data))を試してください。 ' – Sasxa
ありがとう、Sasxa。あなたは私の日を救う! 'spyOn(service.render、 'filter')と.returnValue(Observable.of(mockEventType))'とタイプした後、 'listenToRender()'を実行したときに 'mockEventType'を使ってフィルタを作成し、 'subscribe' – donggaolao
@SasxaあなたはなぜspyOnが' filter'に値を渡すことができるのか説明できますか? – donggaolao