使用 Jest 测试 Node.js 应用

阅读时长 6 分钟读完

Jest 是 Facebook 推出的一款 JavaScript 测试框架,它能够让开发者轻松地编写各种类型的测试,包括单元测试、集成测试和端到端测试等。在前端开发中,Jest 可以方便地用来测试 React 组件、Vue 组件和纯 JavaScript 函数等。

除了可以用来测试前端应用程序之外,Jest 也可以用来测试 Node.js 应用程序。在这篇文章中,我们将探讨如何使用 Jest 测试 Node.js 应用。

安装 Jest

首先,我们需要在 Node.js 应用程序中安装 Jest。在终端运行以下命令:

安装完 Jest 后,我们就可以开始编写测试用例了。

编写测试用例

在 Node.js 应用程序中,测试用例通常包括测试函数和预期结果。我们可以将测试函数放在一个独立的测试文件中,例如 app.spec.js

以下是一个简单的 Node.js 应用程序,它将两个数字相加并返回结果:

现在,我们可以编写一个基本的 Jest 测试用例来测试这个函数。在 app.spec.js 文件中,可以写入以下代码:

这个测试用例会导入 app.js 文件中导出的 add 函数,并测试它是否能够正确地将两个数字相加。

在这个测试用例中,我们使用了 Jest 中的 test 函数。它的第一个参数是测试用例的描述,第二个参数是测试代码的实际执行代码。

在测试代码中,我们使用了 Jest 中的 expect 函数,并将 add(1, 2) 的结果与 3 进行比较。如果比较结果为真,则测试用例通过;否则,测试用例失败。

执行测试用例

你可以使用以下命令来运行测试用例:

或者,在 package.json 文件中添加下面的脚本:

然后你就可以运行 npm test 来执行测试用例了。

Jest 将执行所有位于项目中以 .test.js.spec.js 结尾的测试文件,并报告测试结果,如下所示:

我们的单个测试用例通过了,并显示了执行时间和测试结果的摘要。

Jest API

除了 Jest 的核心功能之外,它还提供了许多有用的 API,让我们能够更好地控制测试流程。

describe()

describe() 函数用于创建一个测试套件。每个测试套件由一组相关的测试用例组成。例如,假设我们有一个名为 math 的 JavaScript 模块,它包含 addsubtract 两个函数。我们可以编写以下测试套件来分别测试这两个函数:

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

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

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

在这个测试套件中,我们创建了一个名为 math 的测试套件,并在其中创建了两个名为 addsubtract 的测试子套件。每个测试子套件都包含一个或多个测试用例。

beforeAll()、afterAll()、beforeEach() 和 afterEach()

beforeAll()afterAll()beforeEach()afterEach() 函数用于在测试套件或测试用例中执行一些特殊设置或清理工作。例如,假设我们的应用程序需要一个名为 db 的数据库连接。我们可以使用以下代码,在测试用例开始之前创建一个数据库连接,然后在测试用例结束时关闭连接:

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

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

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

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

在这个测试套件中,我们使用了 Jest 中的 beforeAll()afterAll() 函数来分别创建和关闭数据库连接。所有在测试套件中定义的测试用例都将共享同一个 db 对象。如果需要在测试用例之间共享某些对象或状态,则可以使用 beforeEach()afterEach() 函数。

expect() 和 Matchers

expect() 函数用于编写期望值的测试代码。它提供了许多匹配器(Matchers)来帮助我们比较期望值和实际值。

下面是一些常用的 Jest 匹配器:

  • expect(x).toBe(y):比较 x 和 y 是否相等。
  • expect(x).toEqual(y):比较 x 和 y 的值是否相等。
  • expect(x).not.toBe(y):比较 x 和 y 是否不相等。
  • expect(x).toMatch(pattern):比较 x 是否匹配正则表达式 pattern。
  • expect(x).toContain(y):比较 x 是否包含 y。
  • expect(x).toThrow():检查 x 是否抛出了异常。

除了这些常用的 Matchers 之外,Jest 还提供了许多其他的 Matchers,可以参考官方文档的详细说明。

总结

在本文中,我们探讨了如何使用 Jest 测试 Node.js 应用程序。虽然 Node.js 应用程序和浏览器应用程序有所不同,但是使用 Jest 来测试它们的过程是相似的。

我们学习了如何安装 Jest、编写测试用例、执行测试用例以及使用 Jest API 中的一些重要功能。

在实践中,我们可以根据自己的需求和项目的规模来编写测试用例和使用 Jest API,从而确保应用程序的质量和稳定性。

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

纠错
反馈