前言
Jest 是一个非常受欢迎的 JavaScript 测试框架。它提供了易于使用和强大的功能,因此在前端和后端开发中都广受欢迎。在本文中,我们将介绍如何在 Node.js 应用程序中使用 Jest 进行测试。在本文中,我们将介绍如何使用 Jest 编写简单、有用和可重复的测试。
安装 Jest
我们可以在 Node.js 项目中使用 npm 安装 Jest:
npm install --save-dev jest
安装完成后,我们就可以通过运行下面的命令在终端中启动 Jest:
npx jest
创建测试文件
在我们开始编写测试之前,我们需要创建一个测试文件夹,以便我们可以组织我们的测试用例。通常情况下,我们将其命名为 __tests__
文件夹,它应该位于我们的项目根目录中。在 __tests__
文件夹中,我们将继续创建一个名为 index.test.js
的文件,这是我们要编写测试用例的地方。
编写测试用例
现在我们已经安装了 Jest 并创建了测试文件夹,我们将开始编写我们的第一个测试用例。下面是一个简单的测试用例,它测试了我们的 sum
函数是否正确工作:
function sum(a, b) { return a + b; } test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); });
这是我们测试用例的函数结构。我们定义了一个名为 sum
的函数,并编写了一个测试用例来验证其功能是否正确。test
函数接受两个参数:
- 描述测试用例的字符串。
- 一个测试函数,该函数包含要针对某个特定行为而测试的代码。
在这个测试函数中,我们使用了 expect
函数来断言我们的 sum
函数是否按照预期工作。具体来说,我们使用了 toBe
匹配器来检查 sum
函数的输出是否等于 3。
使用模块导入和导出
在 Node.js 应用程序中,我们通常通过导入其他模块来重用代码。如果我们要测试此类模块,我们应该使用 module.exports
将它们暴露出去。这样,我们就可以在测试文件中使用 require
函数来导入它们。
下面是一个使用 module.exports
和 require
的示例:
-- -------------------- ---- ------- -- ------ -------- ------ -- - ------ - - -- - -------------- - ---- -- ------------- ----- --- - ------------------ ---------- - - - -- ----- --- -- -- - ------------- ------------ ---
使用 async / await 进行异步测试
在 Node.js 中,许多操作都是异步的,例如读取文件或从数据库中获取数据。Jest 允许我们使用 async
和 await
语法编写异步测试。在本示例中,我们将编写一个测试用例,该测试用例使用 fs.readFile
函数从文件中读取文本内容。
// index.test.js const fs = require('fs').promises; test('read file content', async () => { const content = await fs.readFile('test.txt', 'utf8'); expect(content).toBe('Hello, World!'); });
这个测试用例使用了 async
和 await
语法来等待 fs.readFile
函数返回结果。在该函数返回结果之后,我们使用 expect
函数来验证文本内容是否等于 'Hello, World!'。由于我们在测试用例中使用了 async
和 await
,因此 Jest 知道我们要进行异步测试。
使用 Jest 的 Mock 功能
在测试中,我们有时需要模拟某些操作,例如模拟从远程 API 获取数据或模拟用户输入。Jest 具有一种内置的 Mock 功能,它使我们能够模拟这些操作。
在本示例中,我们将演示如何使用 Mock 实现假的 API 请求。我们将创建一个名为 fetchData
的函数,它使用 fetch
函数从远程 API 获取数据。在测试用例中,我们将使用 Jest 的 Mock 功能来模拟这个 fetchData
函数。
-- -------------------- ---- ------- -- -------- ----- -------- ----------- - ----- -------- - ----- ----------------------------------------------- ----- ---- - ----- ---------------- ------ ----- - -------------- - ---------- -- ------------- ----- --------- - ------------------- ----------- ------ ----- -- -- - ----- ------------ - - --------- ----------- -- ----- --------------- - ------------------------------ ----- ---------------- - ----------------- ----- -- -- ---------------- --- ------------------ ------------------------------ -- ------------------ ----- ---- - ----- ------------ ----------------------------------- --------------------------- ---
在这个测试用例中,我们首先创建了一个假的响应对象 mockResponse
,并在 mockJsonPromise
中使用 Promise.resolve
将它变成一个等待解决的 Promise。接下来,我们创建了一个假的 fetch
函数,并在 mockFetchPromise
中使用 Promise.resolve
将其包装在一个等待解决的 Promise 中。然后,我们使用 jest.spyOn
函数将 fetch
函数替换为我们的假 fetch
函数。
最后,我们调用 fetchData
函数获取数据,并使用 expect
函数来检查返回的数据是否等于 mockResponse
。在测试用例完成后,我们使用 global.fetch.mockRestore()
来恢复原始的 fetch
函数。
总结
在本文中,我们介绍了如何使用 Jest 在 Node.js 应用程序中进行测试。我们学习了如何创建测试文件夹、编写测试用例、使用异步测试和使用 Jest 的 Mock 功能。通过这些技巧,我们可以编写可靠和可重复的测试,这些测试可以帮助我们消除代码问题和维护成本。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b11fc648841e9894d74f89