我想确保在收到等待的点击后,它会退订:
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()
之后没有再调用任何方法。
我如何测试取消订阅被称为? 我该如何模拟订阅部分?