LogoLogo
LogoLogo
欢迎来到周周黑客松!

入门

新成员快速上手指南黑客松入门手册

深度参与

深度参与与共建指南积分与等级体系
社区活动手册

资源

社区常用工具链接
社区网站开发指南
AI 辅助开发API 开发认证系统编码规范配置说明贡献指南数据库部署指南常见问题 FAQ快速开始国际化 (i18n)项目结构测试UI 设计规范
开源许可与贡献方式
资源社区网站开发指南测试

测试

单元测试和 E2E 测试指南

测试策略

类型工具覆盖目标
单元测试Jest + Testing Library80%+ 覆盖率
E2E 测试Playwright核心用户流程

运行测试

# E2E 测试
pnpm e2e

# CI 环境 E2E
pnpm e2e:ci

单元测试

测试文件放在对应模块的 __tests__/ 目录下,命名为 *.test.ts(x):

src/features/events/
├── __tests__/
│   └── event-utils.test.ts
├── event-utils.ts
└── index.ts

编写示例

import { describe, it, expect } from "@jest/globals";
import { formatEventDate } from "../event-utils";

describe("formatEventDate", () => {
  it("should format date correctly", () => {
    const date = new Date("2025-07-01T10:00:00Z");
    expect(formatEventDate(date)).toBe("2025-07-01 10:00");
  });

  it("should handle null date", () => {
    expect(formatEventDate(null)).toBe("TBD");
  });
});

E2E 测试

Playwright 测试覆盖核心用户流程:

import { test, expect } from "@playwright/test";

test("user can view events page", async ({ page }) => {
  await page.goto("/events");
  await expect(page.getByRole("heading", { name: /活动/ })).toBeVisible();
});

运行单个测试文件

pnpm exec playwright test tests/events.spec.ts

调试模式

pnpm exec playwright test --debug

测试最佳实践

  • 单元测试关注纯函数和业务逻辑
  • E2E 测试关注用户可见的交互流程
  • 使用 describe 分组相关测试
  • 测试命名描述预期行为(should ...)
  • 避免测试实现细节,关注输入输出

项目结构

Monorepo 目录组织和各模块职责说明

UI 设计规范

Hackathon Weekly 社区的 Modern Editorial 风格指南

On this page

测试策略运行测试单元测试编写示例E2E 测试运行单个测试文件调试模式测试最佳实践
发现
文档
消息
登录