如何为 asdf-golang 贡献代码:基于 ShellSpec 编写插件测试的完整教程

📅 发布时间:2026/8/24 17:35:04
如何为 asdf-golang 贡献代码:基于 ShellSpec 编写插件测试的完整教程 如何为 asdf-golang 贡献代码基于 ShellSpec 编写插件测试的完整教程【免费下载链接】asdf-golangGo plugin for the asdf version manager [maintainerkennyp]项目地址: https://gitcode.com/gh_mirrors/as/asdf-golangasdf-golang 是为 asdf 版本管理器提供的 Go 语言插件支持在多版本 Go 之间快速切换。想为 asdf-golang 贡献代码这篇完整教程带你快速上手插件测试编写从环境搭建、理解测试框架到运行 ShellSpec 测试并提交 PR一次讲清楚。1️⃣ 先认识 asdf-golang 插件asdf-golang 的本质是一组Shell 脚本核心能力都在bin/目录下bin/install、bin/uninstall安装与卸载 Go 版本bin/list-all、bin/latest-stable列出与查找版本bin/parse-legacy-file解析.go-version、go.mod等文件bin/exec-env导出运行时环境变量因为插件是 Shell 脚本所以测试不采用 Go 的go test而是使用ShellSpec 测试框架asdf 社区的插件测试标准方案。只要会写一点点 RSpec 风格的 DSL就能为它写测试。2️⃣ 快速搭建开发环境克隆仓库一分钟搞定git clone https://gitcode.com/gh_mirrors/as/asdf-golang.git cd asdf-golang准备三个工具工具用途说明ShellSpec运行插件单元测试CI 固定使用 0.28.1 版本shellcheckShell 代码静态检查对应make lintshfmtShell 代码格式化对应make format⚠️ 注意项目要求 asdf 最低版本为0.28.1本地 asdf 请提前升级。3️⃣ 项目结构速览测试相关文件都在哪 与测试直接相关的文件只有 5 个全部摸清即可上手文件作用spec/spec_helper.sh全局测试辅助文件所有测试用例共享.shellspecShellSpec 配置文件通过--require spec_helper引入辅助函数test-fixtures/create-dummy-installs.sh批量创建假的 Go 安装目录test-fixtures/go.mod、test-fixtures/.go-version用于验证版本文件解析的样例数据Makefile一键执行格式化与代码检查另外.github/workflows/main.yml定义了 CI 流水线先在 macOS 与 Ubuntu 双系统上运行创建假安装目录、解析测试样例文件再安装 ShellSpec 并执行全部测试。4️⃣ spec/spec_helper.sh读懂三个全局钩子打开spec/spec_helper.sh你会看到三个回调函数——这就是 asdf Spec 测试框架的骨架spec_helper_precheck()所有 spec 文件加载前只执行一次用于声明最低 asdf 版本如minimum_version 0.28.1还可用info、warn、setenv等函数做前置检查spec_helper_loaded()每个 spec 文件加载完成后触发spec_helper_configure()核心模块加载完成后触发可import自定义断言如import support/custom_matcher 框架建议把 shell 选项如set -eu放在 helper 中统一设置而不是写在各个测试文件里避免不同 spec 文件间行为不一致。5️⃣ 编写第一个插件测试ShellSpec 实战在spec/下新建一个以_spec.sh结尾的文件如spec/install_spec.sh即可开始写测试。ShellSpec 采用 RSpec 风格 DSL读起来像自然语言Describe bin/parse-legacy-file do It 解析 .go-version 文件 do Run bin/parse-legacy-file test-fixtures/.go-version Should output /1.17.13/ End end三个核心构件记牢即可Describe描述被测对象一个文件或一个功能It单条测试用例RunShould执行命令并断言输出 小技巧优先测试纯逻辑脚本如bin/parse-legacy-file、bin/list-bin-paths无需联网下载速度又快又稳定。6️⃣ 用 test-fixtures 构造测试数据测试最怕真的下载 100MB 的 Go 安装包。asdf-golang 用test-fixtures/create-dummy-installs.sh优雅解决这个问题脚本在installs/asdf-golang/下批量创建1.16、1.17.1……1.19.3等空目录模拟已安装多个版本的状态让版本选择逻辑可以在不联网的情况下被测试。同样地test-fixtures/go.mod内容为go 1.18和test-fixtures/.go-version就是现成的解析样例CI 正是用它们验证bin/parse-legacy-file的输出是否正确。 贡献时若新功能依赖特定数据也请在test-fixtures/中补充对应样例文件。7️⃣ 一键运行测试与代码检查项目自带Makefile提交前跑一遍这三条命令make format-check # 检查代码格式shfmt make lint # 运行 shellcheck 静态检查 make format # 自动修复格式问题随后按 CI 中的方式安装 ShellSpec0.28.1后在项目根目录执行shellspec即可运行全部单元测试效果与 CI 完全一致。8️⃣ 提交 PR 前的自检清单✅ 提交前请逐项核对make format-check与make lint本地通过本地运行 ShellSpec全部用例绿色新增的bin/脚本有对应测试覆盖需要假安装环境的测试复用了test-fixtures/中的样例涉及版本解析的改动同步更新了test-fixtures/go.mod或.go-version在 macOS 与 Linux 两种系统上均验证过CI 是双系统矩阵测试 完成以上步骤你的 PR 就能一次通过 CI。asdf-golang 欢迎每一位贡献者——从修复一个小 bug、完善一条测试用例开始吧【免费下载链接】asdf-golangGo plugin for the asdf version manager [maintainerkennyp]项目地址: https://gitcode.com/gh_mirrors/as/asdf-golang创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考