使用 Jest 测试 Node.js 应用,实战教程
在开发 Node.js 应用过程中,我们经常需要测试代码逻辑是否正确、函数是否正确输入输出。而使用 Jest 测试框架可以让我们更加高效地进行单元测试、集成测试等各种测试。Jest 是 Facebook 开源的一个针对 React 应用的测试框架,但是同样适用于其他类型的应用。下面让我们来看一下如何使用 Jest 测试 Node.js 应用。
安装和配置
首先,我们需要安装 Jest,可以通过 npm 安装:
npm install --save-dev jest
如果您的项目没有引入 Babel,则还需要在项目根目录下创建一个 .babelrc
文件,用于配置 Babel:
{ "presets": ["@babel/preset-env"] }
然后在 package.json
文件中添加 Jest 配置:
{ "scripts": { "test": "jest" } }
这样在运行 npm test
命令时就会自动运行 Jest。
编写测试用例
在 __tests__
目录下创建一个测试文件,命名规则为 *.test.js
或 *.spec.js
,例如 app.test.js
。开始编写测试用例之前,我们需要引入 Node.js 应用的入口文件(例如 app.js
),并导出相关函数或类,例如:
// app.js function sum(a, b) { return a + b; } module.exports = sum;
然后在 app.test.js
文件中编写测试用例:
const sum = require('../app'); test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); });
在上面的代码中,test
函数是 Jest 提供的全局函数,用于编写测试用例。第一个参数是测试用例的名称,第二个参数是测试代码。在测试代码中使用 expect
函数来断言结果是否符合预期。例如使用 toBe
函数来判断函数执行的结果是否等于预期结果。
运行测试用例
运行测试用例需要使用 Jest 命令:
npm test
如果一切正常,Jest 将会输出测试结果:
PASS __tests__/app.test.js ✓ adds 1 + 2 to equal 3 (5ms)
在测试结果中,PASS
表示测试通过,adds 1 + 2 to equal 3
是测试用例的名称,5ms
是测试代码执行的时间。
常用的 Jest 断言函数有以下几种:
expect(a).toBe(b)
:判断变量a
是否等于变量b
。expect(a).not.toBe(b)
:判断变量a
是否不等于变量b
。expect(a).toEqual(b)
:判断变量a
是否与变量b
相等(涉及到对象和数组时使用)。expect(a).toBeDefined()
:判断变量a
是否已定义。expect(a).toBeFalsy()
:判断变量a
是否为假。expect(a).toBeTruthy()
:判断变量a
是否为真。expect(a).toContain(b)
:判断变量a
是否包含变量b
。expect(a).toBeInstanceOf(constructor)
:判断变量a
是否为constructor
类型的实例。
多个测试用例
我们可以在一个测试文件中编写多个测试用例,例如:
-- -------------------- ---- ------- ----- --- - ------------------ ---------- - - - -- ----- --- -- -- - ------------- ------------ --- ---------- - - - -- ----- --- -- -- - ------------- ------------ --- ---------- - - ---- -- ----- --- -- -- - ------------- ------------- ---
在上面的测试用例中,分别测试了 1 + 2
、0 + 0
和 1 + (-1)
的结果是否符合预期。
异步测试
如果我们需要测试异步函数的结果,我们需要使用 Jest 的异步测试方式,例如:
-- -------------------- ---- ------- -------- ------------------- - ------------- -- - ----------------- -- ------ - ----------- ------ ------ -- - -------- -------------- - --- - -------------------------- ------- - ----- ------- - ------------ - - -------------------- ---
在测试代码中,我们需要添加一个回调函数 done
,并且该函数只能在测试完成后调用一次。在传入回调函数时,需要使用 try...catch
块包裹整个测试代码,以处理异常情况。
覆盖率测试
除了单元测试、集成测试,我们还可以使用 Jest 进行覆盖率测试,以测量我们的测试用例覆盖了多少代码,例如:
npm test -- --coverage
运行完毕后,Jest 会在项目根目录中生成一个 coverage
目录,其中包含了每个源代码文件被测试的情况,可以使用浏览器打开 coverage/lcov-report/index.html
文件来查看详细情况。
总结
本文主要介绍了如何使用 Jest 测试 Node.js 应用,并通过示例代码详细讲解了 Jest 的安装和配置、编写测试用例、运行测试用例、异步测试和覆盖率测试等内容。Jest 是一个强大的测试框架,不仅适用于 React 应用,也适用于其他类型的应用,实际开发中建议多加使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c4f9b783d39b4881845a64