如何测试Observable.fromEvent

Sac*_*aka 5 karma-jasmine angular

我们如何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();
}
Run Code Online (Sandbox Code Playgroud)

我正在使用ngb-date-picker并且正在使用fromevent以捕获文档单击并关闭日期选择器

Val*_*eve 5

我认为,在这种情况下,您最好的猜测是首先不将文档作为全局文件获取,而是将其注入到组件/指令/可注入文件中(角度提供了一种使用-> @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];
  })
}
Run Code Online (Sandbox Code Playgroud)

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

以及何时需要触发您的方法

addEventListener.calls.argsFor
Run Code Online (Sandbox Code Playgroud)

等等。我在假设您使用茉莉花作为测试套件的前提下编写了此答案,但应该与其他套件相似,只是方法有所不同。希望能帮助到你 :)