取消对fromEvent的单元测试(this.document,“ click”)

时间:2019-02-06 08:31:42

标签: angular karma-jasmine domdocument removeeventlistener

我想确保在收到等待的点击后,它会退订:

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()会在removeEventListener上呼叫document,但显然不会。

我将所有DOMDocument方法添加到我的模拟(get activeElement()adoptNode() ..)中,但是在unsubscribe()之后没有再调用任何方法。

我如何测试取消订阅被称为? 我该如何模拟订阅部分?

0 个答案:

没有答案