如何测试Observable.fromEvent

时间:2018-02-08 04:35:20

标签: angular karma-jasmine

我们如何使用jasmine

测试Observable.fromEvent
@ViewChild('d')
private inputDatePicker: NgbInputDatepicker;

this.subscription = Observable.fromEvent(document, 'click').subscribe((event: KeyboardEvent) => {
       if (!this.eRef.nativeElement.contains(event.target)) {
            this.inputDatePicker.close();
       }
});

ngOnDestroy() {
    this.subscription.unsubscribe();
}

我正在使用ngb-date-picker并使用fromevent来抓住文档点击并关闭日期选择器

1 个答案:

答案 0 :(得分:4)

我认为在这种情况下你最好的猜测首先不是将文档作为全局文档,而是将其注入到component / directive / injectable中(angular提供了一种方法,通过使用 - > @Inject(DOCUMENT)来提供它)。此时,您可以通过自己的实现来模拟它。从那里你可以添加这样的方法到你的模拟

{
  addEventListener: jasmine.createSpy('addEvent').and.callFake((eventName: string, cb: () => void) => {
    imageListeners[eventName] = cb;
  }),
  removeEventListener: jasmine.createSpy('removeEvente').and.callFake((eventName: string) => {
    delete imageListeners[eventName];
  })
}

(适用于您的情况,这只是我为类似情况编写的一些代码)

当你需要触发你的方法时

addEventListener.calls.argsFor

等等。 我在假设您使用茉莉作为测试套件的情况下编写了这个答案,但应该与其他套件类似,只是方法不同。 希望它有所帮助:)