ci(workflows): 优化测试流程并添加完整测试工作流

添加新的测试脚本命令并优化CI工作流程
将常规CI测试改为快速测试模式
添加完整的测试工作流用于定期和发布时运行
调整vitest配置以支持并行测试和超时设置
更新测试错误日志前缀以增强可读性
这个提交包含在:
Zain 2025-12-16 16:15:14 +08:00
父节点 e369349811
当前提交 dd22c1db11
共有 5 个文件被更改,包括 98 次插入 和 8 次删除

查看文件

@ -73,11 +73,12 @@ jobs:
run: npm ci
# ------------------------------------------
# 步骤 4: 运行测试(带覆盖率)
# 步骤 4: 运行快速测试(无覆盖率,更快)
# ------------------------------------------
- name: 🧪 Run tests with coverage
run: npm run test:coverage
- name: 🧪 Run fast tests
run: npm run test:ci
continue-on-error: false
timeout-minutes: 3
# ------------------------------------------
# 步骤 5: 上传测试覆盖率

71
.github/workflows/complete-tests.yml vendored 普通文件
查看文件

@ -0,0 +1,71 @@
# ==========================================
# GitHub Actions Workflow: Complete Test Suite
# ==========================================
#
# 功能:运行完整的测试套件(包括性能测试)
#
# 触发条件:
# - 手动触发
# - 每周定时运行
# - Release 标签
#
# 时长:约 5-10 分钟
#
# ==========================================
name: Complete Tests
# 触发条件
on:
# 手动触发
workflow_dispatch:
# 每周一早上运行
schedule:
- cron: '0 0 * * 1'
# Release 标签触发
push:
tags:
- 'v*.*.*'
# 环境变量
env:
NODE_VERSION: '20'
jobs:
complete-tests:
name: Complete Test Suite
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v4
- name: 🔧 Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: 📦 Install dependencies
run: npm ci
# 运行所有单元和集成测试
- name: 🧪 Run unit and integration tests
run: npm run test:ci
continue-on-error: false
# 运行性能测试
- name: 📊 Run performance tests
run: npm run test:performance
continue-on-error: false
# 可选:运行 E2E 测试
# - name: 🎭 Run E2E tests
# run: npm run test:e2e
# continue-on-error: false
- name: ✅ All tests completed
run: echo "✅ Complete test suite passed!"

查看文件

@ -16,6 +16,9 @@
"test": "vitest",
"test:ui": "vitest --ui",
"test:coverage": "vitest --coverage",
"test:ci": "vitest run --coverage",
"test:full": "vitest run --coverage --config vitest.config.full.ts",
"test:performance": "vitest run tests/performance",
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"test:e2e:debug": "playwright test --debug",

查看文件

@ -75,7 +75,7 @@ describe('StorageManager', () => {
expect(mockChromeStorage.set).toHaveBeenCalledWith({ [key]: value });
expect(console.error).toHaveBeenCalledWith(
'Failed to save to chrome.storage:',
'[CDR] Failed to save to chrome.storage:',
expect.any(Error)
);
expect(mockLocalStorage.setItem).toHaveBeenCalledWith(key, JSON.stringify(value));
@ -133,7 +133,7 @@ describe('StorageManager', () => {
expect(mockChromeStorage.get).toHaveBeenCalledWith(key);
expect(console.error).toHaveBeenCalledWith(
'Failed to read from chrome.storage:',
'[CDR] Failed to read from chrome.storage:',
expect.any(Error)
);
expect(mockLocalStorage.getItem).toHaveBeenCalledWith(key);
@ -191,7 +191,7 @@ describe('StorageManager', () => {
expect(mockChromeStorage.remove).toHaveBeenCalledWith(key);
expect(console.error).toHaveBeenCalledWith(
'Failed to remove from chrome.storage:',
'[CDR] Failed to remove from chrome.storage:',
expect.any(Error)
);
expect(mockLocalStorage.removeItem).toHaveBeenCalledWith(key);
@ -213,7 +213,7 @@ describe('StorageManager', () => {
expect(mockChromeStorage.clear).toHaveBeenCalled();
expect(console.error).toHaveBeenCalledWith(
'Failed to clear chrome.storage:',
'[CDR] Failed to clear chrome.storage:',
expect.any(Error)
);
expect(mockLocalStorage.clear).toHaveBeenCalled();
@ -257,7 +257,7 @@ describe('StorageManager', () => {
const keys = await storageManager.getAllKeys();
expect(console.error).toHaveBeenCalledWith(
'Failed to get keys from chrome.storage:',
'[CDR] Failed to get keys from chrome.storage:',
expect.any(Error)
);
expect(keys).toEqual(['local-key1', 'local-key2']);

查看文件

@ -4,11 +4,26 @@ export default defineConfig({
test: {
globals: true,
environment: 'jsdom',
// 测试超时配置
testTimeout: 10000, // 10秒(默认5秒太短)
hookTimeout: 10000,
// 排除慢速测试(用于快速反馈)
exclude: [
'**/node_modules/**',
'**/dist/**',
'**/e2e/**', // E2E 测试由 Playwright 处理
'**/performance/**', // 性能测试不在常规 CI 中运行
// 暂时排除有问题的 quark-adapter 测试
// '**/quark-adapter.test.ts', // 修复后可以移除这行
],
// 启用并行测试(加速执行)
threads: true,
maxThreads: 4,
minThreads: 1,
coverage: {
provider: 'v8',
reporter: ['text', 'json', 'html'],