Vault UI 测试套件怎么跑:全量、仅非企业版与浏览器过滤三种方式
【免费下载链接】vaultA tool for secrets management, encryption as a service, and privileged access management项目地址: https://gitcode.com/GitHub_Trending/va/vault
Vault 仓库里的ui/目录是一个 Ember 应用,也就是 Vault 的官方 Web UI。修改 UI 代码后,最直接的正确性验证就是跑它的测试套件。测试入口是ui/package.json里的一组pnpm run test*脚本,它们统一经过包装脚本 start-vault.js:该脚本会先启动一个 Vault dev server,再执行ember exam跑测试,因此验收测试(acceptance tests)打的是真实后端而不是 mock。
本文覆盖三种运行方式:CI 使用的全量套件、仅非企业版的子集、以及浏览器模式下按名字过滤单个测试。
准备条件
ui/README.md 的 Prerequisites 一节列出的环境依赖:
- Git
- nvm(文档中为外部链接,此处仅作说明,安装按 nvm 官方方式进行即可)
- pnpm
- Google Chrome
Node.js 版本以仓库根目录.nvmrc/.node-version文件为准,当前仓库固定为24.19.0(ui/package.json中engines.node为24)。
以下命令都假定你位于ui/目录:
nvm use # 切换到 .nvmrc 指定的 Node 版本 pnpm i # 安装依赖另有一个前置条件:start-vault.js通过vault命令启动 dev server。带CI环境变量时它使用仓库本地的../bin/vault(需要先按根目录 README 的说明构建出 Vault 二进制);本地运行时则假定vault已在 PATH 中。
测试运行时实际启动的服务参数(见 start-vault.js)为:
vault server -dev -dev-ha -dev-transactional -dev-root-token-id=root -dev-listen-address=127.0.0.1:9200testem.js 把测试内对/v1的请求代理到http://127.0.0.1:9200,也就是这个 dev server。
方式一:全量运行
pnpm run testui/README.md 描述该命令为 “lint & run all the tests (CI uses this)”,即 CI 使用的完整入口。它在ui/package.json中对应node scripts/start-vault.js,不传过滤参数,跑全部测试。
只想跑测试、跳过 lint 步骤时:
pnpm run test:quick对应脚本是node scripts/start-vault.js --split=8 --preserve-test-name --parallel=1,README 描述为 “run all the tests without linting”。
另一个从仓库根目录进入的入口是 Makefile 的test-embertarget:它先执行cd ui && pnpm i,再执行cd ui && pnpm run test:oss(即方式二的非企业版套件)。
方式二:仅跑非企业版测试
pnpm run test:ossui/README.md 描述为 “lint & run all the non-enterprise tests (CI uses this)”。ui/package.json中对应pnpm test -f='!enterprise',即 QUnitfilter设为!enterprise,排除测试名中包含enterprise的用例。ui/package.json里还有对应的反向入口test:ent(node scripts/start-vault.js -f='enterprise',仅跑企业版测试),README 未收录该命令。
方式三:浏览器模式下按名字过滤
调试单个测试时,README 提供了一个不拆分并行、直接在浏览器中打开全部测试的自定义脚本:
pnpm test:filter # 在浏览器中运行非企业版测试(-f 默认为 !enterprise) pnpm test:filter -f='<test name>' # 按测试名过滤<test name>替换为你要调试的测试名,README 给出的示例是pnpm run test:filter -f="policies"。过滤参数对应 QUnit 的filter配置(QUnitfilter按测试全名做子串匹配,!前缀表示排除)。
该模式在ui/package.json中是node scripts/start-vault.js --server -f='!enterprise':--server走 testem 的 server 模式,测试不拆分并行,便于定位问题。README 说明这是 “自动在浏览器中打开全部测试” 的脚本,用-f目标到正在调试的那条测试。
输出判读与已知行为
- 本地浏览器自动切 Firefox:非 CI 环境且未带
--server时(即方式一、二),start-vault.js会自动追加--launch=Firefox。脚本注释说明原因:headless Chrome 下Hds::Modal的一个事件监听器不触发,导致 pending test waiter 和超时,所以本地运行改用 Firefox 作为权宜方案。 - 终端输出:testem.js 配置了
tap_failed_tests_only: true和tap_quiet_logs: true,TAP 流只输出失败的测试,通过用例会安静跳过;判断是否全绿主要看失败条目。 - CI 产物:
CI环境下 testem 使用xunitreporter,结果写入test-results/qunit/results.xml;launch_in_ci为 Chrome,容器内运行需要--no-sandbox参数(testem.js中已按process.env.CI处理)。
README 与 package.json 的两处出入
写这篇文章时核对了ui/README.md与ui/package.json的脚本定义,有两处不一致,以命令实际行为为准时应以 ui/package.json 为准:
- README 称
pnpm run test与pnpm run test:oss都 “包含 lint”,但这两个脚本定义本体分别是node scripts/start-vault.js与pnpm test -f='!enterprise',脚本内没有 lint 步骤,lint 应是在 CI 中单独执行的。 - README 列出了
pnpm run test:quick-oss(不带 lint 的非企业版测试),但ui/package.json当前未定义该脚本。
继续写测试时看什么
如果要新增或组织测试,ui/docs/tests.md 说明了目录约定:/acceptance放走真实 API 的工作流测试(会引发并发不稳定或缺第三方依赖的场景才用 mock)、/helpers放共享的 selectors 与 API 响应 stub、unit放 utils/adapters/serializers 的测试。组件、路由等编码约定见 ui/README.md Contributing 一节列出的ui/docs/文档。
【免费下载链接】vaultA tool for secrets management, encryption as a service, and privileged access management项目地址: https://gitcode.com/GitHub_Trending/va/vault
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考