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));
});

此外,我建议您尝试使用大理石图进行测试,开发人员使用大理石图的经验要好得多。看见