angular - 单元测试取消订阅 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()
会打电话removeEventListener
,document
但显然没有。
我将所有 DOMDocument 方法添加到我的模拟 ( get activeElement()
, adoptNode()
..) 中,但没有一个在之后被调用unsubscribe()
。
我如何测试取消订阅被调用?我如何模拟订阅部分?
解决方案
推荐阅读
- javascript - 如何在二维中找到给定 A、B 坐标的平行线
- javascript - TypeError:我的搜索栏 redux 上未定义操作
- r - 使用gsub在R中用破折号分隔短语中的中间词
- swift - 以编程方式设置 Eureka 行值
- python - 如何为 AWS MediaLive RTMP_PUSH 输入目标设置自定义域名?
- javascript - 重新连接过程时websocket捕获数据?
- java - 对 Aruba 主机的 Java 发布请求失败
- java - ConcurrentHashMap的值对象同时读写
- python - 我的循环只保存最后一次迭代的结果
- django - django 从相关表中聚合值