菜单

测试框架

相关源文件

目的与范围

本文档介绍了 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 文件提供了测试套件中使用的基本实用程序

来源:test/common.sh1-248

关键测试实用程序

功能目的使用示例
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用于生成测试中使用的模拟数据。这确保了测试有一致、可预测的数据进行验证。

来源:update_test_mocks.sh1-60

nvmrc 测试夹具

NVM 项目包含一个专门的 .nvmrc 测试夹具存储库,作为 Git 子模块。这些夹具用于验证项目特定的 Node.js 版本配置文件.

来源:test/fast/Unit tests/nvm_process_nvmrc1-35 .gitmodules1-4

单元测试

单元测试结构

NVM 中的单元测试通常遵循此结构

  1. Source 要测试的 NVM 脚本
  2. Source 通用测试工具
  3. 如果需要,模拟外部依赖项
  4. 使用各种输入执行被测试的函数
  5. 验证输出和退出代码是否符合预期

来自nvm_ls_remote测试的示例

来源:test/fast/Unit tests/nvm_ls_remote1-87

示例单元测试

典型的单元测试将覆盖外部依赖项,并根据预期输出来验证函数行为。例如,nvm_ls_remote测试

  1. Source NVM 脚本
  2. 模拟nvm_download函数以返回可预测的数据
  3. 使用各种输入调用nvm_ls_remote
  4. 将实际输出与预期输出进行比较
  5. 使用不存在的版本验证错误处理

来源:test/fast/Unit tests/nvm_ls_remote1-87

功能测试

功能测试验证 NVM 命令作为一个整体是否正常工作。这些测试通常验证

  1. 命令输出是否符合预期
  2. 错误消息是否恰当
  3. 退出代码是否正确
  4. 副作用(如文件创建)是否按预期发生

来自 '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 添加新功能时,开发人员应添加适当的测试

  1. 位于test/fast/Unit tests/中的新功能单元测试
  2. 位于相应目录中命令行为的功能测试
  3. 如有必要,更新或添加测试夹具
  4. 如果添加模拟数据,请更新update_test_mocks.sh

测试文件应

  1. Source NVM 脚本
  2. 尽可能使用来自common.sh的断言函数
  3. 具有指示测试内容的描述性文件名
  4. 遵循验证输出和退出代码的现有模式

结论

NVM 测试框架为验证 Node 版本管理器的功能提供了一种健壮的方式。通过结合单元测试、功能测试和测试夹具,它确保 NVM 正确管理 Node.js 版本并与 shell 环境正确集成。测试基础设施旨在易于维护,允许开发人员在代码库演进时轻松添加和更新测试。