使用 Jest 进行 JavaScript 对象单元测试

阅读时长 7 分钟读完

Jest 是一个基于 JS 的简单代码测试工具,它旨在提高代码测试的效率和开发者的生产力。作为前端开发者,我们通常要测试一些 JS 对象的边界条件和逻辑,这时候 Jest 就发挥了重要作用。在本文中,我们将学习如何使用 Jest 进行 JavaScript 对象单元测试,并展示一些实际用例。

安装 Jest

安装 Jest 很简单,只需在终端中运行以下命令:

如果你使用的是 yarn,则可以运行以下命令:

编写测试用例

让我们从一个简单的例子开始。假设我们有一个 Person 对象,并且我们要测试它的 getFullName() 方法。我们期望该方法能正确地将名字和姓氏连接起来生成一个字符串。现在我们来编写一个测试用例。

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

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

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

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

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

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

在测试用例中,我们使用 Jest 的 describe()test() 方法来描述和运行测试。在上面的例子中,我们描述了 Person 对象,并在其中创建了一个测试用例来测试 getFullName() 方法。在测试用例中,我们使用了 expect() 断言来对生成的 fullName 进行验证。如果 fullName 与预期值 ('John Doe') 相等,则测试通过。

常见的 Jest 断言

Jest 支持多种断言,下面是一些常见的示例:

断言 描述
expect(value) 创建一个新的 expectation 对象,它可以用来进行各种断言测试。
expect(value).toBe(other) 用精确相等 (===)测试两个变量是否相等。
expect(value).toEqual(other) 用递归相等测试对象的内容是否相等。
expect(value).not.toBe(other) 确保两个变量不相等。
expect(value).toBeDefined() 确保变量已定义。
expect(value).toBeNull() 确保变量等于 null。
expect(value).toBeTruthy() 确保变量是 truthy。
expect(value).toBeFalsy() 确保变量是 falsy。
expect(value).toBeGreaterThan(number) 确保变量大于传入的 number 值。
expect(value).toBeGreaterThanOrEqual(number) 确保变量大于等于传入的 number 值。
expect(value).toBeLessThan(number) 确保变量小于传入的 number 值。
expect(value).toBeLessThanOrEqual(number) 确保变量小于等于传入的 number 值。
expect(value).toBeInstanceOf(Class) 确保变量是一个特定的类的实例。
expect(value).toMatch(regexp) 确保变量与传入的正则表达式匹配。
expect(array).toContain(item) 确保数组中包含一个特定的项目。
expect(callback).toThrow() 确保回调将引发异常。

更多的断言可以查看 Jest 的官方文档:https://jestjs.io/docs/en/expect

运行测试用例

现在我们已经编写了一个测试用例,让我们运行它:

如果一切正常,你应该会看到一个测试成功的消息。

测试异步代码

很多情况下,我们需要对异步的代码进行测试。例如,我们要测试一个异步的函数,该函数会在 1 秒后返回一个结果。现在我们先来编写这个函数:

在上面的例子中,我们定义了一个 wait() 函数,它使用 setTimeout() 来模拟异步操作,一旦操作完成,就会调用传入的回调函数。

接下来,我们可以编写一个测试用例来测试 wait() 函数:

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

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

在测试用例中,我们将函数 done() 作为回调函数传递给 wait() 函数。当 wait() 函数完成后,它将调用传入的回调函数来通知测试用例已经完成。但需要注意的是,wait() 函数是一个异步函数,如果我们没有正确测试异步操作,测试用例会迅速完成,而且几乎不会进行测试。

在这种情况下,我们需要告诉 Jest 我们期望测试用例将运行多长时间,我们可以使用 done() 函数来实现这一点。

测试异常

最后,让我们来看一下如何测试异常。在这个例子中,我们将测试一个抛出异常的函数是否能够正确地抛出异常。

在上面的例子中,我们定义了一个 throwError() 函数,它接收一个字符串作为参数,并抛出一个带有该字符串的异常。接下来我们可以编写一个测试用例来测试它:

在测试用例中,我们使用了一个函数作为参数传递给 expect(),该函数将错误函数作为参数执行,并捕获由该函数抛出的异常。如果异常不是预期的,测试将会失败。

总结

本文中,我们学习了如何使用 Jest 进行 JavaScript 对象单元测试。我们从安装 Jest 的基础开始,到编写简单的测试用例、测试异步操作、测试异常等高级用例,Jest 提供了众多方便的工具来测试我们的 JS 对象。通过测试,在代码开发阶段和运用阶段中,能够大大减少出错率,从而提高整个产品的稳定性和效率。

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

纠错
反馈