本文档介绍了 Node 版本管理器 (NVM) 项目的测试基础设施。它涵盖了测试的组织、测试工具、测试夹具以及如何运行和扩展测试套件。测试框架确保 NVM 正确管理 Node.js 版本并与 shell 环境正确集成。
有关执行这些测试的 CI/CD 流水线的信息,请参阅 CI/CD 流水线。
NVM 采用全面的测试方法,结合了单元测试、功能测试和集成测试。测试基础设施使用 shell 脚本和自定义测试运行器来验证 NVM 在不同环境中的功能。
来源:test/common.sh1-248 update_test_mocks.sh1-60 .gitmodules1-4
NVM 的测试套件是分层组织的,以区分不同类型的测试
来源:test/fast/Unit tests/nvm_ls_remote1-87 test/fast/Unit tests/nvm_process_nvmrc1-35 .gitmodules1-4 .editorconfig20-35
NVM 的测试套件分为几类,以按目的和执行时间组织测试
| 类别 | 目的 | 位置 |
|---|---|---|
| 快速测试 | 验证核心功能的快速测试 | test/fast/ |
| 慢速测试 | 可能需要更长时间运行的测试(例如,实际安装) | test/slow/ |
| 单元测试 | 验证单个功能的测试 | test/fast/Unit tests/ |
| 功能测试 | 验证命令行为的测试 | test/fast/ 中的各种子目录 |
| Source 测试 | 验证 NVM shell 集成的测试 | 各种测试文件 |
来源:test/fast/Unit tests/nvm_ls_remote1-87 test/fast/Aliases/'nvm alias' should not accept aliases with a hash1-27
common.sh 文件提供了测试套件中使用的基本实用程序
| 功能 | 目的 | 使用示例 |
|---|---|---|
assert_ok | 验证函数是否成功 | assert_ok nvm_is_version_installed v10.15.0 |
assert_not_ok | 验证函数是否失败 | assert_not_ok nvm_is_version_installed invalid_version |
make_fake_node | 创建用于测试的假 Node.js 版本 | make_fake_node v12.18.3 |
make_fake_iojs | 创建用于测试的假 io.js 版本 | make_fake_iojs v3.3.1 |
strip_colors | 从输出中移除 ANSI 颜色代码 | `echo "colored text" |
nvm_json_extract | 从 JSON 中提取值 | nvm_json_extract node < file.json |
来源:test/common.sh1-103 test/common.sh106-247
脚本update_test_mocks.sh用于生成测试中使用的模拟数据。这确保了测试有一致、可预测的数据进行验证。
NVM 项目包含一个专门的 .nvmrc 测试夹具存储库,作为 Git 子模块。这些夹具用于验证项目特定的 Node.js 版本配置文件.
来源:test/fast/Unit tests/nvm_process_nvmrc1-35 .gitmodules1-4
NVM 中的单元测试通常遵循此结构
来自nvm_ls_remote测试的示例
来源:test/fast/Unit tests/nvm_ls_remote1-87
典型的单元测试将覆盖外部依赖项,并根据预期输出来验证函数行为。例如,nvm_ls_remote测试
nvm_download函数以返回可预测的数据nvm_ls_remote来源:test/fast/Unit tests/nvm_ls_remote1-87
功能测试验证 NVM 命令作为一个整体是否正常工作。这些测试通常验证
来自 'nvm alias' 测试的示例
来源:test/fast/Aliases/'nvm alias' should not accept aliases with a hash1-27
NVM 项目中的测试是通过 Makefile 系统执行的。主要测试目标包括
| 目标 | 描述 |
|---|---|
test | 运行所有测试 |
test-fast | 仅运行快速测试 |
test-slow | 仅运行慢速测试 |
test-installation | 测试安装过程 |
可以作为 shell 脚本直接运行单个测试
在为 NVM 添加新功能时,开发人员应添加适当的测试
test/fast/Unit tests/中的新功能单元测试update_test_mocks.sh测试文件应
common.sh的断言函数NVM 测试框架为验证 Node 版本管理器的功能提供了一种健壮的方式。通过结合单元测试、功能测试和测试夹具,它确保 NVM 正确管理 Node.js 版本并与 shell 环境正确集成。测试基础设施旨在易于维护,允许开发人员在代码库演进时轻松添加和更新测试。