本页面介绍了 Nodemon 项目中使用的测试方法、组织结构和实用工具。它为希望理解现有测试或为项目贡献新测试的开发者提供了指导。有关贡献 Nodemon 的信息,请参阅贡献指南。
Nodemon 使用基于 Mocha 的综合测试框架来验证其在各种组件中的功能。测试主要侧重于确保 Nodemon 正确监控文件、管理进程、响应事件和应用配置设置。测试套件包括单元测试和模拟真实世界使用场景的集成测试。
来源:test/monitor/run.test.js test/utils.js test/fork/watch-restart.test.js test/events/complete.test.js
测试按目录组织,这些目录与 Nodemon 的不同组件相对应。这种组织结构使得查找特定功能的测试变得容易,并确保 Nodemon 的所有方面都得到了充分测试。
来源:test/monitor/run.test.js test/events/complete.test.js test/fork/watch-restart.test.js test/config/env.test.js test/fixtures/env.js test/fixtures/events/nodemon.json
`test/utils.js` 中的测试实用工具提供了运行测试、控制 nodemon 实例以及验证预期行为的基本功能。这些实用工具使得在整个代码库中编写一致、可靠的测试变得更加容易。
来源:test/utils.js39-79 test/utils.js81-96 test/utils.js17-38 test/utils.js98-116 test/utils.js9-15
| 功能 | 目的 | 使用示例 |
|---|---|---|
run(cmd, callbacks) | 使用指定参数运行 nodemon,并为输出和错误提供回调 | run('--ext js ' + appjs, {...}) |
cleanup(p, done, err) | 终止一个 nodemon 进程并调用 done 回调 | cleanup(p, done) |
match(str, key) | 检查字符串是否包含特定关键词 | match(data, 'restarting due to changes') |
monitorForChange(str) | 返回一个用于监控匹配模式的文件变化的函数 | monitorForChange('changes after filters') |
Plan(count, done) | 用于协调断言的类,确保调用了正确数量的断言 | new Plan(4, done) |
大多数测试遵循类似的模式:配置 Nodemon,启动它,触发文件更改,然后验证 Nodemon 是否通过重新启动或发出预期事件来正确响应。
来源:test/monitor/run.test.js38-53 test/events/complete.test.js104-124 test/fork/watch-restart.test.js72-92
测试套件包含多个类别的测试,每个类别都侧重于 Nodemon 功能的不同方面。
监控测试验证 Nodemon 是否正确监控文件变化并作出适当响应。这些测试通常会创建临时文件,修改它们,并验证 Nodemon 是否重新启动被监控的进程。
来源:test/monitor/run.test.js38-53 test/monitor/watch-restart.test.js51-73 test/monitor/ignore.test.js15-52
事件测试验证 Nodemon 是否在适当的时间发出预期的事件。这些测试通常设置事件监听器,并验证事件是否按正确的顺序发出。
来源:test/events/complete.test.js57-63 test/events/complete.test.js97-124 test/events/scripts.test.js52-78
分叉测试验证 Nodemon 是否正确处理分叉进程,特别是在文件更改时。这些测试侧重于确保当被监控文件修改时,子进程能正确重新启动。
来源:test/fork/watch-restart.test.js72-92 test/fork/watch-restart.test.js149-172
配置测试验证 Nodemon 是否正确加载和应用配置设置。这些测试通常设置特定的配置,并验证 Nodemon 是否根据这些设置行事。
来源:test/config/env.test.js18-33
为 Nodemon 编写测试时,请遵循以下模式和最佳实践
来源:test/monitor/run.test.js18-36 test/events/complete.test.js32-55
来源:test/monitor/watch-restart.test.js51-73 test/fork/watch-restart.test.js72-92
来源:test/events/complete.test.js104-124 test/events/scripts.test.js52-78
测试套件包含多个夹具以方便测试
| 测试夹具 | 目的 |
|---|---|
test/fixtures/app.js | 用于测试 nodemon 功能的基本应用程序 |
test/fixtures/env.js | 用于测试环境变量传递的日志脚本 |
test/fixtures/events/nodemon.json | 用于测试事件脚本的配置文件 |
来源:test/fixtures/env.js test/fixtures/events/nodemon.json
运行 Nodemon 测试套件
git clone https://github.com/remy/nodemon.gitnpm installnpm testnpx mocha test/monitor/run.test.js来源:test/monitor/run.test.js test/events/complete.test.js test/utils.js
来源:test/monitor/run.test.js169-192
来源:test/monitor/run.test.js91-141
遵循这些模式并利用现有测试实用工具,您可以有效地测试 Nodemon 中的新功能和修复,确保代码库的可靠性和质量。