Files
outlookEmailPlus/tests/layout-system
胡绍康andCopilot cf7817bb95 feat: UI全局美化重设计 + 恢复CI/测试/文档
UI 改进:
- 设置页面内嵌显示(不再弹窗)
- 临时邮箱卡片添加验证码提取按钮
- 导入账号弹窗 textarea 样式优化
- 账号头像 8 色渐变轮转
- 临时邮箱页顶栏邮箱点击复制
- 邮箱管理页自动选中默认分组
- 切换分组时重置邮件列 UI
- 修复收件箱/垃圾邮件 Tab 切换(.folder-tab → .email-tab)
- 修复从临时邮箱返回后账号列数据残留
- 仪表盘分组列表可点击导航

恢复:
- 恢复 .github/ CI 工作流
- 恢复 tests/ 测试目录
- 恢复 docs/ 文档目录
- 恢复 CONTRIBUTING.md, SECURITY.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-01 21:24:06 +08:00
..

布局系统测试运行指南

测试概述

本目录包含可调整布局系统的完整测试套件,包括单元测试、集成测试、性能测试和可访问性测试。

目录结构

tests/layout-system/
├── jest.config.js          # Jest 配置文件
├── setup.js                # 测试环境设置
├── test-utils.js           # 测试辅助工具
├── README.md               # 本文件
├── unit/                   # 单元测试
│   ├── layout-manager.test.js
│   └── state-manager.test.js
├── integration/            # 集成测试
│   ├── drag-resize.test.js
│   ├── panel-collapse.test.js
│   ├── reset-layout.test.js
│   ├── state-error-handling.test.js
│   ├── state-load.test.js
│   ├── state-multi-user.test.js
│   ├── state-save.test.js
│   ├── window-adapt.test.js
│   └── keyboard-resizer.test.js
├── performance/            # 性能测试
│   └── (待添加)
└── accessibility/          # 可访问性测试
    └── (待添加)

前置要求

安装依赖

# 安装 Jest 和相关依赖
npm install --save-dev jest @jest/globals jest-environment-jsdom

# 或使用 yarn
yarn add --dev jest @jest/globals jest-environment-jsdom

配置 package.json

在项目根目录的 package.json 中添加测试脚本:

{
  "scripts": {
    "test": "jest --config tests/layout-system/jest.config.js",
    "test:watch": "jest --config tests/layout-system/jest.config.js --watch",
    "test:coverage": "jest --config tests/layout-system/jest.config.js --coverage",
    "test:unit": "jest --config tests/layout-system/jest.config.js tests/layout-system/unit",
    "test:integration": "jest --config tests/layout-system/jest.config.js tests/layout-system/integration"
  }
}

运行测试

运行所有测试

npm test

运行单元测试

npm run test:unit

运行集成测试

npm run test:integration

运行测试并生成覆盖率报告

npm run test:coverage

覆盖率报告将生成在 tests/layout-system/coverage/ 目录。

监听模式(开发时使用)

npm run test:watch

测试用例说明

单元测试

StateManager 测试 (unit/state-manager.test.js)

测试状态持久化功能:

  • ✅ TC-F4-001-P: 保存有效状态
  • ✅ TC-F4-003-P: 加载有效状态
  • ✅ TC-F4-004-P: 多用户布局隔离
  • ✅ TC-F4-006-N: localStorage 不可用
  • ✅ TC-F4-007-N: localStorage 数据损坏
  • ✅ 版本迁移(v1.0 → v1.1)
  • ✅ 数据验证

运行单个测试文件:

npx jest tests/layout-system/unit/state-manager.test.js

LayoutManager 测试 (unit/layout-manager.test.js)

测试布局管理核心功能:

  • ✅ TC-F1-001-P: 计算拖动后的宽度
  • ✅ TC-F1-002-B: 限制在最小宽度
  • ✅ TC-F1-003-B: 限制在最大宽度
  • ✅ TC-F2-001-P: 折叠面板
  • ✅ TC-F2-002-P: 展开面板
  • ✅ 更新 CSS 变量
  • ✅ 切换面板状态

运行单个测试文件:

npx jest tests/layout-system/unit/layout-manager.test.js

集成测试

拖动调整宽度测试 (integration/drag-resize.test.js)

测试完整的拖动流程:

  • ✅ TC-F1-001-P: 完整的拖动流程
  • ✅ TC-F1- 确保邮件详情面板至少 400px
  • ✅ TC-F1-005-N: 快速拖动导致鼠标移出窗口
  • ✅ TC-F1-006-PF: 拖动帧率测试(≥ 55fps)

运行单个测试文件:

npx jest tests/layout-system/integration/drag-resize.test.js

面板折叠测试 (integration/panel-collapse.test.js)

测试完整的折叠/展开流程:

  • ✅ TC-F2-001-P: 点击折叠按钮折叠面板
  • ✅ TC-F2-002-P: 点击折叠指示条展开面板
  • ✅ TC-F2-003-N: 尝试折叠所有面板
  • ✅ TC-F2-004-P: 折叠后 resizer 不可见
  • ✅ TC-F2-005-N: 折叠状态下尝试拖动
  • ✅ 折叠动画性能测试(200ms ± 50ms)

运行单个测试文件:

npx jest tests/layout-system/integration/panel-collapse.test.js

测试覆盖率目标

根据 TD 文档的要求:

  • 代码覆盖率: > 80%

    • 分支覆盖率: > 80%
    • 函数覆盖率: > 80%
    • 行覆盖率: > 80%
    • 语句覆盖率: > 80%
  • 功能覆盖率: 100%

    • F1 - 拖动调整宽度: 100%
    • F2 - 面板折叠展开: 100%
    • F3 - 恢复默认布局: 100%
    • F4 - 状态持久化: 100%
    • F5 - 窗口尺寸适配: 100%
    • F6 - 键盘可访问性: 100%

测试数据

测试使用的数据定义在 test-utils.js 中:

  • 用户 ID: test-user, user-a, user-b, guest
  • 面板宽度:
    • 分组面板: 150px (最小) ~ 400px (最大)
    • 账号面板: 180px (最小) ~ 500px (最大)
    • 邮件列表: 280px (最小) ~ 600px (最大)
  • 窗口尺寸: 1200px, 900px, 700px (断点)

调试测试

运行单个测试用例

npx jest -t "TC-F1-001-P"

查看详细输出

npx jest --verbose

调试模式

node --inspect-brk node_modules/.bin/jest --runInBand

然后在 Chrome 中打开 chrome://inspect 进行调试。

持续集成

GitHub Actions 配置示例

name: 布局系统测试

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '16'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

      - name: Upload coverage
        uses: codecov/codecov-action@v2
        with:
          files: ./tests/layout-system/coverage/lcov.info

常见问题

Q: 测试失败:localStorage is not defined

A: 确保 setup.js 文件正确配置了 localStorage mock。

Q: 测试失败:requestAnimationFrame is not defined

A: 确保 setup.js 文件正确配置了 requestAnimationFrame mock。

Q: 覆盖率不足 80%

A: 检查是否有未测试的代码分支,添加更多的边界测试用例。

Q: 测试运行很慢

A: 使用 --maxWorkers=4 参数限制并发数,或使用 --runInBand 串行运行。

下一步计划

  • 添加性能测试(帧率、内存占用)
  • 添加可访问性测试(axe-core)
  • 添加 E2E 测试(Playwright)
  • 添加视觉回归测试
  • 集成到 CI/CD 流程

参考文档

联系方式

如有问题,请联系测试团队或在 GitHub Issues 中提出。