ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Mole 源码仓库如何配置 MOLE_TEST_NO_AUTH 与 TERM 环境变量跑通完整 Bats 测试套件

Mole 源码仓库如何配置 MOLE_TEST_NO_AUTH 与 TERM 环境变量跑通完整 Bats 测试套件 Mole 源码仓库如何配置 MOLE_TEST_NO_AUTH 与 TERM 环境变量跑通完整 Bats 测试套件【免费下载链接】Mole Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app.项目地址: https://gitcode.com/GitHub_Trending/mole15/Mole如果你要在 Mole 的源码仓库里验证 shell 改动需要跑完整个 Bats 测试套件但直接后台或裸跑./scripts/test.sh经常会遇到两类问题测试触发了真实的 sudo / Touch ID 授权提示而卡住或者日志中途截断、退出码非零看起来像测试挂了。仓库约定的解法是把MOLE_TEST_NO_AUTH1与TERMxterm-256color两个环境变量放进运行命令里。这篇文章基于仓库中的 AGENTS.md、scripts/test.sh、docs/SECURITY_DESIGN.md 与 CONTRIBUTING.md说明如何配置这两个变量并验证套件完整跑完。准备条件Mole 的 shell 代码面向 macOSBash 3.2 兼容scripts/test.sh的第 6 步安装测试只在 macOS 上执行非 macOS 平台会打印Installation test skipped (non-macOS)并跳过。CONTRIBUTING.md 给出的开发依赖安装命令brew install shfmt shellcheck bats-core golangci-lint其中bats是运行套件的前提shellcheck用于测试脚本的 lint 步骤缺失时该步骤跳过但会告警。套件的第 3 步会运行go test ./...机器上没有 Go 时这一步跳过要完整执行则按 CONTRIBUTING.md 的要求安装 Go 1.24。另有一个 CI 相关限制在CItrue或GITHUB_ACTIONStrue环境下scripts/test.sh会检查gtimeout或timeout是否存在缺失时直接退出提示Install coreutils to provide gtimeout。本地运行不受此检查影响。MOLE_TEST_NO_AUTH 做了什么docs/SECURITY_DESIGN.md 的 Layer 5 对它的定义是MOLE_TEST_NO_AUTH1会让 Mole 拒绝调用sudo、osascript、launchctl以及任何会弹出授权提示的路径bats 与集成测试要求开启该变量。除了代码里的守卫如 lib/core/sudo.sh 中request_sudo_access在检测到该变量时直接返回失败scripts/test.sh还做了双重保险它自己会export MOLE_TEST_NO_AUTH1并在一个临时目录里生成sudo、osascript、launchctl三个 stub 脚本放进PATH最前面——stub 被调用时会打印类似mole test blocked sudo: ...的报错并退出非零而不是静默通过。也就是说即使某个测试路径忘了带守卫stub 也会大声失败而不是真的去要密码。AGENTS.md 的 Critical Safety Rules 把这条规则写成硬性要求测试、手工复现和验证都使用MOLE_TEST_NO_AUTH1除非你明确在测真实的授权行为任何新增的sudo、osascript、launchctl直接调用必须有MOLE_TEST_MODE/MOLE_TEST_NO_AUTH守卫或在测试中完全 mock。跑完整套件的主路径命令仓库验证清单里给出的完整套件命令AGENTS.md Verification 一节TERMxterm-256color MOLE_TEST_NO_AUTH1 ./scripts/test.sh为什么两个变量都要显式带上尽管 scripts/test.sh 内部会export MOLE_TEST_NO_AUTH1并且在TERM为空时自动补export TERMxterm-256colorAGENTS.md 给出的原因是后台运行的./scripts/test.sh继承不到 TTYtput会失败bats validator 会在中途因管道断开而死掉留下截断的日志和一个非零退出码看起来像一整套红色失败而它只是环境问题。文档明确说TERMxterm-256color MOLE_TEST_NO_AUTH1 ./scripts/test.sh可以跑到完成这种情况应归类为 setup 问题而不是产品失败。Makefile 里封装的等价入口是make testMakefile 中test目标即MOLE_TEST_NO_AUTH1 ./scripts/test.sh。套件实际执行了什么跑之前了解各步骤的副作用来自 scripts/test.sh 正文清理超过 60 分钟的遗留tests/tmp-*目录并生成一个临时目录存放sudo/osascript/launchctlstub退出时自动清理用shellchecklint 所有tests/*.bats与tests/*.sh运行 Bats 单元测试。tests/installer_fd.bats只在装了fd时纳入tests/installer_zip.bats只在装了zip及zipinfo/unzip时纳入当 bats 支持--jobs且系统有parallel或rush时并行执行默认上限 6 个 job带时序断言的core_performance.bats、regression.bats被拆到并行批次结束后串行执行运行go build、go vet、go test ./...无 Go 则跳过验证lib/core/common.sh可正常加载并对mole、bin/clean.sh、bin/optimize.sh做bash -n语法检查在 macOS 上以临时HOME与--prefix实际执行一次install.sh临时目录在结束后清理若 Homebrew 版 mole 已安装则跳过因为install.sh拒绝覆盖。此外脚本会unset NO_COLOR因为测试断言确定性的 ANSI 转义输出宿主机 shell 里设置的NO_COLOR会干扰这些断言。开发过程中的定向测试AGENTS.md 的工作规则是开发中优先跑定向 Bats 测试提交前再跑完整套件。单个测试文件的命令形态MOLE_TEST_NO_AUTH1 bats tests/clean_core.bats该文档的 Hotspot Ownership 一节按代码区域列出了对应的定向测试命令例如改动lib/clean/project.shpurge 逻辑时跑MOLE_TEST_NO_AUTH1 bats tests/purge.bats tests/purge_config_paths.bats改动lib/core/file_ops.sh等文件操作代码时跑MOLE_TEST_NO_AUTH1 bats tests/file_ops_mole_delete.bats tests/file_ops_size.bats tests/file_ops_safe_remove_symlink.bats tests/user_file_ops.bats tests/core_safe_functions.bats改动 shell 代码的完整验证顺序是先./scripts/check.sh --format格式化加 lint再跑对应 Bats 测试或完整套件。如何判断套件跑通了scripts/test.sh 的退出逻辑很直接所有步骤计数失败数为 0 时打印All tests passed!并退出 0否则打印$FAILED tests failed!并退出 1。判定成功时按 AGENTS.md 的要求操作读套件自己的 summary 行不要自己数条数。脚本把有时序敏感的文件拆到独立的串行 Bats 运行中TAP 输出与主并行批次不同按一个前缀去数会漏计。裁判是 runner 的 summary 和退出码自己算的计数要与之对账。不要把测试输出管道接给tail或head。管道会报告 pager 的退出码红色运行会读成绿色。要么完整打印要么落盘到文件后单独检查状态。如果日志截断且退出非零先确认是否就是TERM缺失 / 无 TTY 导致的 validator 管道断开——按文档说法把它归为 setup 问题补上TERMxterm-256color重跑而不是当作测试失败去排查产品代码。限制与边界第 6 步安装测试仅 macOS在其他平台跑完整套件时该步跳过其余步骤仍然执行。并行 Bats 需要 bats 支持--jobs且系统存在parallel或rush不满足时退化为串行套件照常完成。MOLE_TEST_NO_AUTH的意义是让测试不触碰真实授权如果你要测的就是真实授权行为才允许不带该变量AGENTS.mdunless real auth behavior is being tested。完成一次绿色运行后的下一步在 CONTRIBUTING.md 中定义提交前再跑./scripts/check.sh确认格式与 lintCI 会验证 formatting、linting 和测试。【免费下载链接】Mole Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app.项目地址: https://gitcode.com/GitHub_Trending/mole15/Mole创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表