用途:为 React 组件编写测试时使用 React Testing Library(@testing-library/react),并配合 @testing-library/jest-dom 的断言。适用于阅读、创建或更新 .jsx、.tsx 等 React 组件测试。
主要能力与查询优先级:按优先级从高到低选择查询。可访问性查询优先:getByRole(多数场景)、getByLabelText(表单)、getByPlaceholderText(仅在无法使用 label 时)、getByText(仅在无法找到或添加 role 时)、getByDisplayValue(需按已知值查找 input、textarea 或 select 时)。语义查询为符合 HTML5 与 ARIA 的选择器:getByAltText(元素支持 alt 文本时,如 img、area、input 及自定义元素)、getByTitle(一般应避免)。Test ID 查询 getByTestId 仅建议在无法按 role 或文本匹配、或文本为动态内容等场景使用。
用法要点:getByRole("button", { name: /submit/i }) 应优先于 getByText(/submit/i),因为前者会确认元素具有预期 role 并正确出现在可访问性树中。find 系列同理,例如用 findByRole 替代 findByText。TDD 写测试时,尽量使用可用的最高优先级查询;重构现有测试时,可将低优先级查询替换为高优先级查询,例如元素有合适 role 时用 getByRole 替代 getByTestId。若可访问性查询会导致测试脆弱或过于复杂,可使用 getByTestId。
断言原则:应断言页面行为正确,而非检查实现细节。toHaveClass 之类断言应作为最后手段,仅在没有其他可测变化时使用。例如点击同时显示元素并修改另一元素 class,只需断言元素已显示;若唯一变化是 class 修改,则可测试该 class。应断言结果而非过程,关注被测系统最终状态,避免因纯重构导致测试失败。若 jest-dom 匹配器能简化测试代码就使用它们,例如用 toHaveFocus 确认焦点元素,而不是监听 .focus 调用。
限制:资料未提供安装命令、版本要求、平台或收费信息。