问题描述
使用以下代码:
select(): void {
this.initialObservable$
.pipe(
first(),switchMap(() => this.service.getData())
).subscribe(// do stuff);
}
我刚刚遇到了内存泄漏错误。服务调用稍后再次发出,我意识到订阅从未被清除,因为订阅内容再次运行。
很显然,这是我的解决方法:
select(): void {
this.initialObservable$
.pipe(
switchMap(() => this.service.getData()),first()
).subscribe(// do stuff);
}
现在可以正常工作-将first()
运算符调用移到管道的末端。
我一直在研究茉莉花大理石测试,我相信我需要参考可观察到的数据流来测试它,但我没有。因此,回归测试将非常混乱,这使我认为我在做的事情一定是不好的做法。请问以单元可测试的方式编写此类代码的正确方法是什么?大理石测试更佳。
解决方法
如果您在此处返回该可观察值并订阅调用方,则可以轻松进行测试。
scheduler.run(({ cold,expectObservable }) => {
const source$ = cold(' -n--y--',{ n: false,y: true });
const expectedMarble = ' ----x';
const result$ = select();
expectObservable(result$).toBe(expectedMarble,{ x: true });
});