angular - 如何测试 Observable.fromEvent

标签 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 捕捉文档点击并关闭日期选择器

最佳答案

我认为在这种情况下,您最好的猜测是首先不要将文档作为全局文档,而是将其注入(inject)到您的组件/指令/可注入(inject)中(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];
  })
}

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

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

addEventListener.calls.argsFor

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

关于angular - 如何测试 Observable.fromEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48677612/

相关文章:

angularjs - Angular mock 无法注入(inject)我的模块依赖项

angular - karma 单元测试 : ERROR in Cannot read property 'length' of undefined

angular - 如何编写保护程序以防止用户在 Angular 6 中丢失表单数据?

javascript - 以不同方式检查假值/真值有什么区别?

javascript - Angular 通用 : "Project could not be found in workspace."

jquery - Angular-cli 和 Karma 与 jQuery

angular - ng2-translate - 找不到管道 'translate'

angular - 延迟加载模块时构建错误

css - 通过 css winch 查找元素未使用 Protractor Angular 激活

angular - Angular 单元测试中 Testbed.inject(serviceName) 和 fixture.debugElement.injector.get(serviceName) 的区别