我想确保在收到它正在等待的点击后,它会取消订阅:
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()
。
我如何测试取消订阅被调用?我如何模拟订阅部分?