Jest 是一款常用的 JavaScript 测试框架,它具有减少测试配置和在代码文件夹中发现测试文件的优点。 在 Jest 中,expect
🔍 是一个用于通过 Jest 断言库的主要方法之一。 在 Jest 测试框架中,我们可以使用 expect.assertions()
和 expect.hasAssertions()
方法的方式来确保测试代码是否按预期执行。
expect.assertions
在开始使用 Jest 进行测试的时候,我们想要确认的是我们的测试代码执行一次断言语句。expect.assertions()
方法就是为了解决这个问题。
假设我们的代码返回值应该为期望的值。
function myFunction() { return Promise.resolve(true); }
我们可以编写如下的测试代码来测试 myFunction
函数是否按预期执行。
test('myFunction resolves to true', () => { expect.assertions(1); // 进行了一次断言 return myFunction().then(result => { expect(result).toBe(true); }); });
这里使用了 expect.assertions(1)
来确保在测试函数内部至少有一处 expect
断言被运行,这样可以确保测试用例完成后一定会有一条断言已经被验证。
如果该测试用例没有运行任何断言,则测试用例将被标记为失败。
test('myFunction resolves to true', () => { expect.assertions(1); // 进行了一次断言 return myFunction().then(result => { // 此时没有进行任何的断言 }); });
输出的报错信息如下:
-- -------------------- ---- ------- - ---------- -------- -- ---- -------------------- -------- -- ---- - ----------- --- -------- - --------- ------ -- - --------------------- -- - ------ ------------------------ -- - - -- - ------------- - - -- - --- -- - ---
使用 expect.assertions()
可以确保测试代码的正确性,避免测试是否正确的歧义。
expect.hasAssertions
expect.hasAssertions()
方法则是用于确保测试用例至少有一个断言被运行,但是不能确切地知道有多少断言会被运行。其验证方法与 expect.assertions() 很相似:
test('myFunction resolves to true', () => { expect.hasAssertions(); // 至少有一次断言 return myFunction().then(result => { expect(result).toBe(true); }); });
使用 expect.hasAssertions()
可以避免在多个测试用例中进行多个 expect.assertions(N)
的复制粘贴操作。
注意事项
在使用 expect.assertions() 方法时,一定要注意要给每个测试用例都应该添加一次 expect.assertions()
。
另外,expect.assertions()
和 expect.hasAssertions()
并不适合所有使用场合。 当测试用例不需要在项目中检查结果时,相应的测试仅需要验证它是否按照预期运行。在这种情况下,你可以使用快照测试或依赖注入 Mock 安排不同的测试用例。
结论
总之,Jest 的 expect.assertions()
和 expect.hasAssertions()
方法可以确保测试代码按预期执行,并给予测试代码执行必要的上下文支持。 在确保代码未产生错误的同时,测试代码必须正确执行,并在实际测试后完成所有测试断言。 正确使用 expect.assertions() 和 expect.hasAssertions(), 绝对可以提高测试代码质量,让你的测试用例的完成更加准确。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66fa42dd850d445f54f2eac6