用途:本技能用于编写 Jest 单元测试,提供测试驱动开发(TDD)与行为驱动测试的实践模式,包含工厂函数、Mock 策略和测试工具封装。适用场景为编写 Jest 单元测试、创建测试工厂与 Mock、按红—绿—重构循环调试失败用例。
主要内容:
- TDD 流程:先写失败测试,再写最小实现使其通过,通过后重构;没有失败测试就不写生产代码。测试面向行为而非实现细节,关注公开 API 与业务需求,使用描述行为的测试名。
- 工厂模式:以 getMockX(overrides?: Partial<X>) 形式创建工厂,提供合理默认值并允许覆盖单个属性,减少重复数据。资料给出组件 props 工厂与 User 数据工厂示例。
- 测试工具:以自定义 renderWithTheme 包裹所需 Provider,示例导入自 @testing-library/react-native 的 render 与 ThemeProvider。
- Mock 策略:可用 jest.mock 整体模拟模块,或以工厂函数返回模拟对象,并通过 jest.requireMock 取得 mock;可模拟 GraphQL hooks(如 useGetItemsQuery)并设定返回值。
- 测试结构:用 describe 分组渲染、交互、边界情况,beforeEach 中调用 jest.clearAllMocks(),可用 it.todo 占位。
- 查询与交互:用 getByText、queryByText、findByText 区分必须存在、不应存在与异步出现;用 fireEvent 与 waitFor 模拟输入与按钮点击。
- 反模式:避免只测试 mock 是否被调用而不验证真实行为;避免复制粘贴不一致的测试数据而不使用工厂。
- 最佳实践:始终用工厂函数生成 props 与数据,测试行为而非实现,测试名具描述性,用 describe 组织,测试间清理 mock,每个测试只验证一个行为。
运行方式(资料原文):
Run all tests
npm test
Run with coverage
npm run test:coverage
Run specific file
npm test ComponentName.test.tsx
可与其他技能配合:react-ui-patterns 用于覆盖 loading、error、empty、success 等 UI 状态;systematic-debugging 用于在修复前先写复现 bug 的测试。
限制:仅在任务明确匹配上述范围时使用;输出不能替代针对具体环境的验证、测试或专家评审;若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。文档未提供具体版本、依赖版本、配置要求或收费信息。