Javascript Rxjs observable完成而不发出值,通过单元测试,但不应';T
我有以下通过的单元测试,但它不应该通过,因为预期值从未发出 下面是一个重现问题的简化示例:Javascript Rxjs observable完成而不发出值,通过单元测试,但不应';T,javascript,unit-testing,asynchronous,rxjs,jestjs,Javascript,Unit Testing,Asynchronous,Rxjs,Jestjs,我有以下通过的单元测试,但它不应该通过,因为预期值从未发出 下面是一个重现问题的简化示例: it('应该失败,但值被跳过',完成=>{ 第(1)款。管道( 跳过(1) ).订阅( v=>expect(v).toBe(1), ()=>完成。失败(), ()=>完成() ); }); 我可以修改上面的代码来强制至少一个值,但最初的问题是这个错误有一段时间没有被注意到。当没有调用expect()时,Jest似乎很高兴通过单元测试 it('still passs',done=>{ 完成(); });
it('应该失败,但值被跳过',完成=>{
第(1)款。管道(
跳过(1)
).订阅(
v=>expect(v).toBe(1),
()=>完成。失败(),
()=>完成()
);
});
我可以修改上面的代码来强制至少一个值,但最初的问题是这个错误有一段时间没有被注意到。当没有调用expect()
时,Jest似乎很高兴通过单元测试
it('still passs',done=>{
完成();
});
它('same here'()=>{});
如果在测试外部创建可观察对象,则更难发现这一点
it('应该失败,但从未发出值',done=>{
someFunction().subscribe(
v=>expect(v).toBe(1),
()=>完成。失败(),
()=>完成()
);
});
上面的单元测试如预期的那样通过了,但是后来一个bug在没有发出值的情况下完成了可观察的,并且测试仍然通过了
如果从未调用expect()
,是否有办法将Jest配置为失败
如果没有这样的特性,那么我可以做些什么来测试异步代码呢?有一种方法可以验证在测试期间调用了一定数量的断言
因此,您可以这样修改测试:
it('should fail but value is never emitted', () => {
expect.assertions(1);
someFunction().subscribe(v => expect(v).toBe(1));
});
此外,我建议您尝试使用大理石图进行测试,开发人员使用大理石图的经验要好得多。看见