Vault UI 测试套件怎么跑:全量、仅非企业版与浏览器过滤三种方式
2026/9/11 16:38:24 网站建设 项目流程

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.0ui/package.jsonengines.node24)。

以下命令都假定你位于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:9200

testem.js 把测试内对/v1的请求代理到http://127.0.0.1:9200,也就是这个 dev server。

方式一:全量运行

pnpm run test

ui/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:oss

ui/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:entnode 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: truetap_quiet_logs: true,TAP 流只输出失败的测试,通过用例会安静跳过;判断是否全绿主要看失败条目。
  • CI 产物CI环境下 testem 使用xunitreporter,结果写入test-results/qunit/results.xmllaunch_in_ci为 Chrome,容器内运行需要--no-sandbox参数(testem.js中已按process.env.CI处理)。

README 与 package.json 的两处出入

写这篇文章时核对了ui/README.mdui/package.json的脚本定义,有两处不一致,以命令实际行为为准时应以 ui/package.json 为准:

  • README 称pnpm run testpnpm run test:oss都 “包含 lint”,但这两个脚本定义本体分别是node scripts/start-vault.jspnpm 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询