1. Node.js测试运行器初体验上周在重构一个老项目时我偶然发现Node.js从v18开始内置了test模块。这个原生测试方案用起来意外地顺手今天就用三分钟带大家快速上手感受下不用装任何第三方库就能写单元测试的快乐。作为对比之前我们团队一直用JestMocha的组合虽然功能强大但配置繁琐。而Node.js自带的test模块开箱即用特别适合小型项目快速验证逻辑或者给脚本添加基础测试保障。下面我会用实际案例演示如何用不到20行代码搭建完整的测试环境。2. 测试环境搭建与基础用法2.1 模块引入与测试结构新建一个测试文件math.test.js基础结构如下import { test } from node:test; import assert from node:assert; // 待测试的函数 function sum(a, b) { return a b; } // 测试用例 test(加法函数测试, () { assert.strictEqual(sum(1, 2), 3); });关键点说明从node:test导入的test函数是测试入口node:assert提供了各种断言方法每个test()定义一个测试用例运行测试只需执行node math.test.js2.2 常用断言方法实战assert模块提供了丰富的断言方法最常用的有test(各种断言示例, () { const obj { a: 1 }; // 严格相等 assert.strictEqual(1, 1); // 深度相等 assert.deepStrictEqual(obj, { a: 1 }); // 验证异常 assert.throws(() { throw new Error(错误示例); }); });提示优先使用strictEqual而非equal避免隐式类型转换带来的意外结果。3. 高级测试技巧3.1 异步测试的两种写法处理异步代码时可以// 回调写法 test(回调式异步, (done) { setTimeout(() { assert.ok(true); done(); }, 100); }); // Promise写法 test(Promise异步, async () { const result await Promise.resolve(42); assert.strictEqual(result, 42); });3.2 测试套件组织用describe创建测试分组import { describe, test } from node:test; describe(数学运算套件, () { test(加法, () { assert.strictEqual(1 1, 2); }); test(乘法, () { assert.strictEqual(2 * 3, 6); }); });3.3 测试生命周期钩子describe(带生命周期的测试, () { before(() console.log(整个套件开始前)); after(() console.log(整个套件结束后)); beforeEach(() console.log(每个测试开始前)); afterEach(() console.log(每个测试结束后)); test(示例测试, () { assert.ok(true); }); });4. 实战对比与选型建议4.1 与Jest/Mocha的对比特性Node.js testJestMocha内置支持✅❌❌零配置✅❌❌代码覆盖率❌✅需插件Mock功能基础强大需插件断言库基础丰富需配置4.2 适用场景建议推荐使用Node.js内置测试器当快速验证工具函数小型CLI工具测试不想引入额外依赖时需要与Node版本保持同步建议用Jest/Mocha当需要完整Mock系统需要生成覆盖率报告项目已有相关配置需要丰富插件生态5. 常见问题排查Q1: 测试不执行怎么办检查文件后缀必须是.test.js或.spec.js确认Node版本≥18.0.0确保没有语法错误Q2: 如何只运行特定测试node --test-only math.test.jsQ3: 如何获取代码覆盖率虽然原生不支持但可以通过c8工具实现npx c8 node math.test.js6. 性能优化技巧并行执行默认并行运行测试可通过{ concurrency: 1 }禁用过滤慢测试用--test-name-pattern过滤特定测试减少IO操作Mock文件系统操作提升速度test(慢测试, { concurrency: 1 }, async () { // 需要独占资源的测试 });这个原生测试方案最让我惊喜的是它的执行速度。实测对比同项目测试集Jest: 2.3sNode test: 1.1s对于追求轻量化的场景这确实是个不错的选择。不过要注意它目前还不支持浏览器环境测试这是与Jest的主要差距之一。
阅读完成 · 觉得有帮助?