javascript - 如何在 Angular 中对嵌套的订阅方法进行单元测试?
问题描述
MethodToBeTested() {
this.serviceA.methodA1().subscribe((response) => {
if (response.Success) {
this.serviceA.methodA2().subscribe((res) => {
this.serviceB.methodB1();
})
}
});
}
这是场景。
要测试的东西:
serviceA.methodA1().
被称为。- 如果 response.Success 然后检查是否
serviceA.methodA2()
被调用 - 检查是否在收到值
serviceB.methodB1()
时调用。serviceA.methodA2()
第一,易于测试。
let spy = spyOn(serviceA, 'methodA1');
expect(spy).toHaveBeenCalled();
但是一个测试2和3吗?
let spy= spyOn(serviceA, 'methodA1').and.returnValue({subscribe: () => {success:true}});
subject.MethodToBeTested();
类似的东西?
解决方案
最好不要使用嵌套订阅。
这样的事情可能是一个解决方案:
let $obs1 = this.serviceA.methodA1().pipe(share());
let $obs2 = $obs1.pipe(switchMap(x => this.serviceA.methodA2()));
$obs1.subsribe(logic1 here...);
$obs2.subsribe(logic2 here...);
推荐阅读
- c# - for循环内的MVC RadioButton不起作用
- python - 如何将十六进制转换为 utf-8?
- wpf - 清除 UI 上的文本框时,转换器不会触发
- c# - 在if语句条件中声明并赋值一个变量,在语句体中复用
- c - 我不明白这个名为“缓冲区溢出”的错误
- azure - 从 webapp 中分离 azure slot
- python - pycharm,pydev调试器,增加内存使用
- javascript - Mongoose 难以理解如何正确使用 promises/async await
- azure-api-management - 在哪里可以找到 API 管理日志记录字段列表
- java - 从文本文件中读取 200 万条记录并将它们添加到 arraylist