jestjs - 为什么 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
注意:这与预期调用一个断言但接收到零个断言调用不同
解决方案
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();
});
推荐阅读
- chef-infra - 厨师,在您的食谱路径中找不到食谱
- swift - swift 和 swiftc 有什么区别?
- reactjs - 使用 Redux-Saga 在组件和 API 之间进行通信
- java - Jayway jsonpath 在正则表达式中以“/”开头
- java - 无法更改 Android 导航栏颜色
- reactjs - React Material UI ListItems 垂直对齐
- c# - HttpWebRequest 抛出“远程服务器返回错误:(404)未找到。” 对于 404
- r - 如何在这个 LOOP 中使用“DoParallel”,这需要我 12 小时以上才能运行
- qt - 在更改缩放之前无法获得 MapCircle 的宽度
- python - 使用会杀死内核的大型操作