首页 > 解决方案 > 单元测试取消订阅 fromEvent(this.document, 'click')

问题描述

我想确保在收到它正在等待的点击后,它会取消订阅:

const documentListener = fromEvent(this.document, 'click').subscribe(e => {
  // do some thing
  documentListener.unsubscribe();
});

我在嘲笑被注入的文档(@Inject(DOCUMENT) public document: Document)并且确实在 addEventListener 和 removeEventListener 上放置了间谍。

这是我的模拟:

class MockDocument {   
    private listeners = [];

    createEvent(name: string) {
        if (this.listeners.some(l => l.name === name)) {
            this.listeners.find(l => l.name === name).f.call(new Event(name));
        }
    }
    addEventListener(name: string, f: any) {
        this.listeners.push({name: name, f: f});
    }
    removeEventListener(name: string, f: any) {
        this.listeners.splice(
            this.listeners.indexOf(l => l.name === name), 1);
    }
}

我以为fromEvent(this.document, 'click')会打电话addEventListener,但显然没有。

我以为unsubscribe()会打电话removeEventListenerdocument但显然没有。

我将所有 DOMDocument 方法添加到我的模拟 ( get activeElement(), adoptNode()..) 中,但没有一个在之后被调用unsubscribe()

我如何测试取消订阅被调用?我如何模拟订阅部分?

标签: angularkarma-jasminedomdocumentremoveeventlistener

解决方案


推荐阅读