首页 > 解决方案 > 为什么 Jest 在没有抛出异常的情况下说有断言调用?

问题描述

在向我现有的 Jest (js) 测试添加expect.hasAssertions()和添加时,我发现 Jest由于预期和实际断言调用数量不匹配而expect.assertions(0)意外失败了一些测试。

预期调用零个断言,但收到一个断言调用。

我发现即使我从头开始创建一个项目并添加非常简单的测试,Jest 也会由于预期/实际的断言调用而失败。

例如。从 Jest 的网站添加expect.assertions(0)示例失败

test('two plus two is four', () => {
        // I'd think this would pass but it fails
        expect.assertions(0);
        expect(2 + 2).toBe(4);
});

expect.hasAssertions()从 Jest 的网站通行证中添加示例

test('two plus two is four', () => {
        // I'd think this would fail but it passes
        expect.hasAssertions();
        expect(2 + 2).toBe(4);
});

为什么 Jest 在没有抛出异常的情况下说有断言调用?

笑话:26.4.2,节点:13.11.0,NPM:6.13.7

注意:这与预期调用一个断言但接收到零个断言调用不同

标签: jestjs

解决方案


expect.assertions断言有指定数量的断言,即expect(...)...调用。expect.assertions断言存在断言。他们没有断言有特别失败的断言。他们也会考虑失败的断言,但由于第一次失败的断言测试失败,计算它们没有意义。

由于有 1 个断言 ( expect(2 + 2).toBe(4)),因此expect.assertions(0)失败。

出于这个原因,这些将通过:

test('two plus two is four', () => {
    expect.assertions(1);
    expect(2 + 2).toBe(4);
});

test('two plus two is four', () => {
    expect.hasAssertions();
    expect(2 + 2).toBe(4);
});

这些将失败:

test('two plus two is four', () => {
    expect.assertions(0);
    expect(2 + 2).toBe(4);
});

test('two plus two is four', () => {
    expect.hasAssertions();
});

推荐阅读