用途:在编写测试、补充覆盖率、实现业务逻辑或按 TDD 开发新功能时使用。核心原则是只对纯函数做基于输出(input/output)的断言测试,不为钩子、组件与副作用写单元测试。
主要能力与约定:可测试部分是功能性核心,即 utils/ 中的纯函数,如计算、转换、校验、格式化、状态机与 reducer;不可做单元测试的是命令式外壳,如 React 钩子(useX)、组件(*.tsx)、API 调用、Firebase 操作、localStorage、Date.now()、Math.random()。
必要用法:TDD 流程为:先为纯函数写失败测试;实现纯函数使测试通过;再写薄钩子或组件调用该纯函数;跳过钩子与组件的单元测试,交由 E2E 覆盖集成。测试文件与纯函数同目录放置,命名如 calculations.test.ts;钩子与组件不写单测。测试命名采用 describe 描述功能、条件与预期结果,正文按 Arrange-Act-Assert 控制在 3 到 5 行。
常见错误与修复:测试钩子(出现 renderHook()、QueryClientProvider)应把逻辑提取为纯函数;模拟时间(vi.useFakeTimers()、mockDate)应改为把时间戳作为参数注入;模拟内部实现(vi.mock('../api/firebase'))应只测纯逻辑而非集成;测试 UI(render()、screen.getByText())应仅用 E2E 覆盖。
限制与红线:测试文件中若出现除外部 API 之外的 vi.mock()、testing-library 的 renderHook() 或 render()、QueryClient/Provider/wrapper 设置、超过 5 行的测试准备代码,应停下并重构。资料未提供该技能的安装命令、运行命令、作者信息或收费情况。