SuperAPI AI 工具集

tdesign-test-component

测试与质量

查看项目

更新于 10-16 10:40

技能介绍

TDesign 组件测试指南提供 TDesign React 组件单元测试的完整 SOP 和最佳实践。

触发条件

当需要执行以下任务时使用此技能:为组件编写单元测试;更新或修复测试用例;运行快照测试;提高测试覆盖率。

测试框架和工具

Vitest 用作测试运行器;@testing-library/react 用于 React 组件测试;@testing-library/user-event 用于用户交互模拟;@testing-library/jest-dom 用于 DOM 断言扩展。

测试文件规范

文件位置与命名:packages/components/[component-name]/ 下的 tests/ 目录,包含 vitest-[component-name].test.jsx 单元测试文件与 snapshots/ 快照文件(自动生成)。命名格式为 vitest-[component-name].test.jsx。注意:测试文件由 API 平台生成,文件头部有注释标记。

测试工具导入

import { render, fireEvent, vi } from '@test/utils'; 以及 import { ComponentName } from '..';。@test/utils 已封装常用工具,包括 render、fireEvent、vi、act、userEvent、mockDelay、simulateInputChange、simulateKeydownEvent。

SOP 流程

Step 1 基础渲染测试:验证组件能否正常渲染,使用 render 并断言容器子节点的类名。

Step 2 Props 测试:为每个 prop 编写测试用例。Boolean prop 测试默认值、true、false 三种情况并配合快照;枚举 prop 可遍历取值数组,默认值不添加额外类名,其余断言对应类名并配合快照。

Step 3 TNode 渲染测试:验证 children 与 icon 等自定义渲染内容能正确出现。

Step 4 事件测试:使用 vi.fn() 与 fireEvent 触发事件,断言回调被调用及参数类型;禁用状态下事件不应触发。

Step 5 异步操作测试:使用 mockDelay 等待异步完成后再断言。

Step 6 用户交互测试:使用 userEvent.setup() 模拟输入等复杂交互并断言回调与值。

快照测试

CSR 快照测试位于 test/snap/csr.test.jsx,自动为所有 _example/*.tsx 生成快照,运行命令为 NODE_ENV=test-snap pnpm test。SSR 快照测试位于 test/snap/ssr.test.jsx,测试服务端渲染输出。更新快照可使用 pnpm test -- --update,或更新特定组件快照 pnpm test button -- --update。

运行测试命令

运行所有单元测试:pnpm test;运行特定组件测试:pnpm test button;运行测试并生成覆盖率报告:pnpm test -- --coverage;运行快照测试:NODE_ENV=test-snap pnpm test;交互式测试模式:pnpm test -- --ui。

常见测试模式

测试 Loading 状态:断言 t-is-loading 类与 .t-loading 元素。测试 DOM 属性:断言 href 属性值与标签名。测试 className 组合:断言组件类与自定义类同时存在。Mock ResizeObserver:在 beforeAll 中给 global.ResizeObserver 赋值。Mock 时间:引入 MockDate,在 beforeEach 中 set,在 afterEach 中 reset。

测试检查清单

编写测试时确保覆盖:默认渲染;所有 boolean props(true/false 两种情况);所有枚举 props 的每个值;TNode 类型 props;事件回调触发;禁用状态下的行为;加载状态;边界情况(空值、极端值);快照测试。

测试覆盖率要求

整体覆盖率目标大于 80%;新组件要求大于 90% 行覆盖率;核心逻辑要求 100% 分支覆盖。

常见问题

测试文件是否可以手动编辑:vitest-*.test.jsx 文件由 API 平台生成,文件头有注释标记,可以在其基础上添加额外测试,但核心测试应通过 API 平台维护。如何处理异步组件:使用 mockDelay 或 act wrapper,确保异步操作完成后再进行断言。快照测试失败怎么办:首先检查变更是否预期内,如果是预期变更,使用 --update 参数更新快照。