菜单

测试框架

相关源文件

本页面介绍了 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)

来源:test/utils.js

测试流程

大多数测试遵循类似的模式:配置 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 测试套件

  1. 克隆仓库:git clone https://github.com/remy/nodemon.git
  2. 安装依赖:npm install
  3. 运行所有测试:npm test
  4. 运行特定测试:npx mocha test/monitor/run.test.js

测试最佳实践

  1. 隔离性:每个测试都应该是独立的,不依赖于先前测试的状态。
  2. 清理:测试后务必清理临时文件并重置 nodemon。
  3. 超时:注意时间问题。对文件操作和 nodemon 响应使用适当的超时时间。
  4. 错误处理:包含错误回调以捕获和报告意外错误。
  5. 使用实用工具:利用现有测试实用工具简化测试编写和维护。

来源: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 中的新功能和修复,确保代码库的可靠性和质量。