Jest 测试中 assert 和 hasAssertions 的使用

Jest 测试中 assert 和 hasAssertions 的使用

Jest 是一款常用的 JavaScript 测试框架,它具有减少测试配置和在代码文件夹中发现测试文件的优点。 在 Jest 中,expect 🔍 是一个用于通过 Jest 断言库的主要方法之一。 在 Jest 测试框架中,我们可以使用 expect.assertions()expect.hasAssertions() 方法的方式来确保测试代码是否按预期执行。

expect.assertions

在开始使用 Jest 进行测试的时候,我们想要确认的是我们的测试代码执行一次断言语句。expect.assertions() 方法就是为了解决这个问题。

假设我们的代码返回值应该为期望的值。

-------- ------------ -
  ------ ----------------------
-

我们可以编写如下的测试代码来测试 myFunction 函数是否按预期执行。

---------------- -------- -- ------ -- -- -
  --------------------- -- -------
  ------ ------------------------ -- -
    --------------------------
  ---
---

这里使用了 expect.assertions(1) 来确保在测试函数内部至少有一处 expect 断言被运行,这样可以确保测试用例完成后一定会有一条断言已经被验证。

如果该测试用例没有运行任何断言,则测试用例将被标记为失败。

---------------- -------- -- ------ -- -- -
  --------------------- -- -------
  ------ ------------------------ -- -
    -- -----------
  ---
---

输出的报错信息如下:

  - ---------- -------- -- ----

    --------------------

    -------- -- ---- - ----------- --- -------- - --------- ------

      -- -   ---------------------
      -- -   ------ ------------------------ -- -
    - -- -     -------------
         -                 -
      -- -   ---
      -- - ---

使用 expect.assertions() 可以确保测试代码的正确性,避免测试是否正确的歧义。

expect.hasAssertions

expect.hasAssertions() 方法则是用于确保测试用例至少有一个断言被运行,但是不能确切地知道有多少断言会被运行。其验证方法与 expect.assertions() 很相似:

---------------- -------- -- ------ -- -- -
  ----------------------- -- -------
  ------ ------------------------ -- -
    --------------------------
  ---
---

使用 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