在不发射值的情况下完成的 Rxjs 可观察量通过单元测试,但不应该



我有以下单元测试通过,但它不应该通过,因为从未发出期望值。

下面是重现该问题的简化示例:

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

最新更新