我有以下单元测试通过,但它不应该通过,因为从未发出期望值。
下面是重现该问题的简化示例:
it('should fail but value is skipped', done => {
of(1).pipe(
skip(1)
).subscribe(
v => expect(v).toBe(1),
() => done.fail(),
() => done()
);
});
我可以修改上面的代码以强制至少一个值,但最初的问题是该错误在一段时间内没有被注意到。似乎 Jest很乐意在没有调用expect()
时通过单元测试。
it('still passes', done => {
done();
});
it('same here' () => {});
如果观察对象是在测试外部创建的,则这变得更加难以发现。
it('should fail but value is never emitted', done => {
someFunction().subscribe(
v => expect(v).toBe(1),
() => done.fail(),
() => done()
);
});
上面的单元测试按预期通过了,但后来的一个 bug 使可观察对象完整而不发出值,并且测试仍然通过。
有没有办法将 Jest 配置为在从未调用expect()
时失败?
如果没有这样的功能,那么我可以做些什么来测试异步代码?
有方法expect.assertions(number(,它验证在测试期间是否调用了一定数量的断言。
所以你可以像这样修改测试:
it('should fail but value is never emitted', () => {
expect.assertions(1);
someFunction().subscribe(v => expect(v).toBe(1));
});