Jest 单元测试失败:Received function did not throw 的解决方案

阅读时长 4 分钟读完

在前端开发中,单元测试是一个非常重要的环节。而 Jest 是一个流行的 JavaScript 单元测试框架,它提供了丰富的功能和易于使用的 API。然而,在进行 Jest 单元测试时,我们可能会遇到一个错误:Received function did not throw。这个错误表示我们期望测试的函数会抛出一个异常,但实际上却没有抛出。本文将介绍这个问题的原因、解决方案以及如何预防这个问题的发生。

问题原因

在 Jest 中,我们可以使用 toThrow 方法来测试一个函数是否会抛出异常。例如,下面的代码测试了一个抛出错误的函数:

然而,当我们使用 toThrow 方法测试一个没有抛出异常的函数时,Jest 将会抛出一个 Received function did not throw 的错误。例如,下面的代码测试了一个没有抛出错误的函数:

在这种情况下,Jest 将会抛出 Received function did not throw 的错误,因为我们期望 noError 函数会抛出一个错误,但实际上它没有抛出。

解决方案

要解决这个问题,我们可以使用 toThrowError 方法代替 toThrow 方法。toThrowError 方法可以测试一个函数是否抛出了一个特定类型的错误。例如,下面的代码测试了一个抛出类型为 Error 的错误的函数:

然而,当我们使用 toThrowError 方法测试一个没有抛出错误的函数时,Jest 将不会抛出任何错误。因此,我们需要使用 toThrowError 方法的第二个参数来测试错误消息。例如,下面的代码测试了一个没有抛出错误消息为 Error Message 的函数:

在这种情况下,如果 noError 函数没有抛出错误或者抛出的错误消息不是 Error Message,Jest 将会抛出一个错误。

预防措施

除了使用 toThrowError 方法之外,我们还可以采取一些预防措施来避免 Received function did not throw 错误的发生。首先,我们应该确保我们的测试用例覆盖了所有可能的情况,包括正常情况和异常情况。其次,我们应该尽可能地使用断言来测试我们的代码。断言可以帮助我们在测试过程中快速发现错误,并且可以提高代码的可读性和可维护性。

例如,下面的代码使用了多个断言来测试一个函数:

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

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

在这个例子中,我们使用了三个断言来测试 divide 函数。第一个断言测试了正常情况,第二个断言测试了边界情况,第三个断言测试了异常情况。使用多个断言可以帮助我们更全面地测试我们的代码,并且可以提高测试的可靠性。

结论

Jest 单元测试失败:Received function did not throw 的错误提示可能会让我们迷惑,但是我们可以通过使用 toThrowError 方法以及采取预防措施来避免这个问题的发生。在编写测试用例时,我们应该尽可能地使用断言来测试我们的代码,并且应该确保我们的测试用例覆盖了所有可能的情况。这样可以帮助我们更全面地测试我们的代码,并且可以提高代码的质量和可维护性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6742a4dedb344dd98de08fd8

纠错
反馈