vitest是vite官方推荐的测试框架,支持无头chromium执行测试,ci中需按npm ci→test:ci→build顺序执行,失败则中断;构建产物应区分环境、加哈希后缀,并配置超时与浏览器选项保障稳定性。

在持续集成(CI)环境中用 Vite 配合无头模式运行自动化测试并构建产物,关键不是“Vite 自己跑测试”,而是让 Vite 负责快速产出可测的构建结果,再由专用测试工具(如 Vitest + Chromium Headless)完成验证。整个流程需确保环境一致、产物可靠、测试真实。
使用 Vitest 在 CI 中以无头模式执行测试
Vitest 是 Vite 官方推荐的测试框架,天然兼容其配置和环境。它支持在无头浏览器中运行组件或 E2E 测试:
- 安装依赖:
npm install -D vitest @vitest/browser - 在
vite.config.ts或vite.config.js中启用浏览器环境(可选,用于组件测试):export default defineConfig({ test: { environment: 'jsdom' /* 或 'browser' */ } }) - CI 中启动无头 Chromium 执行测试:
npx vitest run --browser.name chromium --browser.headless
(GitHub Actions 等环境默认已预装 Chromium,无需额外安装) - 添加脚本到
package.json:"test:ci": "vitest run --browser.name chromium --browser.headless --coverage"
构建产物前先确保测试通过
Vite 本身不介入测试逻辑,但 CI 流水线必须强制“测试失败则中断构建”:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在 GitHub Actions 的
.github/workflows/ci.yml中按顺序执行:npm ci→npm run test:ci→npm run build - 避免本地与 CI 差异:所有命令统一走
npm run xxx,不直接调用vite build或vitest二进制 - 构建前可加轻量检查,例如验证
dist目录是否为空或入口 HTML 是否存在,防止静默失败
为测试构建带环境标识的产物
CI 中构建的产物应明确区分用途(如仅用于测试),避免误部署:
- 用
--mode指定构建模式:npm run build -- --mode test
对应.env.test文件定义VITE_APP_ENV=test和测试专用 API 地址 - 在
vite.config.js中动态设置输出目录:build: { outDir: mode === 'test' ? 'dist-test' : 'dist' } - 生成带后缀的资源文件名(增强可追溯性):
build: { rollupOptions: { output: { entryFileNames: `assets/[name].test.[hash].js` } } }
CI 环境适配要点
确保无头测试稳定运行,需注意平台特性和资源限制:
- GitHub Actions Ubuntu runner 默认启用 sandbox,Vitest + Chromium 可直接运行;若报
--no-sandbox错误,可在测试命令中加:--browser.options="--no-sandbox --disable-setuid-sandbox" - 禁用 GUI 加速(CI 无显示设备):
--browser.options="--disable-gpu --disable-dev-shm-usage" - 设置超时保障反馈及时:
--test-timeout=10000 --hook-timeout=10000 - 缓存
node_modules和dist-test目录,加快后续运行
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










