关于 react-testing-library
面向使用 Testing Library 编写 React 组件测试的开发者和 AI Agent,提供 9 类共 43 条分优先级规则,涉及查询、异步行为、交互、断言、设置、无障碍与调试。
主要功能
- 019 类共 43 条规则
- 02查询选择与异步测试指导
- 03用户交互与断言实践
- 04组件设置与测试结构
- 05调试和无障碍检查
适用场景
- 01编写新的 React 组件测试
- 02选择查询方式并处理异步结果
- 03检查测试是否验证了实现细节
- 04测试焦点管理和 ARIA 状态
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill react-testing-library安装后在 Claude Code 中输入/react-testing-library确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
metadata.jsonREADME.mdassets/templates/_template.mdreferences/_sections.mda11y-role-queries-verify.mda11y-test-aria-states.mda11y-verify-focus.mdanti-container-queries.mdanti-empty-waitfor.mdanti-implementation-details.mdanti-manual-cleanup.mdanti-redundant-roles.mdanti-unnecessary-act.mdassert-accessible-description.mdassert-have-value.mdassert-jest-dom-matchers.mdassert-text-content.mdassert-visible-over-in-document.mdasync-await-findby.mdasync-findby-over-waitfor.mdasync-no-side-effects-waitfor.mdasync-single-assertion-waitfor.mdasync-waitfor-disappear.mddebug-logroles.mddebug-screen-debug.mddebug-testing-playground.mdquery-avoid-testid.mdquery-get-vs-query.mdquery-label-text-forms.mdquery-prefer-role.md详细介绍
React Testing Library 最佳实践
面向 AI Agent 和大模型的 React 组件 Testing Library 综合测试指南。包含 9 个类别中的 43 条规则,并按影响优先级排序,指导测试编写和代码审查。
适用场景
在以下情况下参考这些指南:
- 使用 React Testing Library 编写新的组件测试
- 选择查询方式(getByRole、getByLabelText 等)
- 处理测试中的异步操作(findBy、waitFor)
- 模拟用户交互(userEvent)
- 审查测试中的反模式和对实现细节的测试
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 查询选择 | 严重 | query- |
| 2 | 异步处理 | 严重 | async- |
| 3 | 常见反模式 | 严重 | anti- |
| 4 | 用户交互 | 高 | user- |
| 5 | 断言 | 高 | assert- |
| 6 | 组件设置 | 中 | setup- |
| 7 | 测试结构 | 中 | struct- |
| 8 | 调试 | 低至中 | debug- |
| 9 | 无障碍测试 | 低 | a11y- |
快速参考
1. 查询选择(严重)
query-prefer-role- 优先使用 getByRole,而不是其他查询方式query-avoid-testid- 避免将 getByTestId 作为主要查询方式query-use-screen- 使用 screen 进行查询query-label-text-forms- 使用 getByLabelText 查询表单字段query-role-name-option- 将 name 选项与 getByRole 搭配使用query-get-vs-query- 元素存在时使用 getBy,不存在时使用 queryByquery-within-scope- 使用 within() 限定查询范围
2. 异步处理(严重)
async-findby-over-waitfor- 使用 findBy,而不是 waitFor + getByasync-await-findby- 始终等待 findBy 查询完成async-single-assertion-waitfor- 在 waitFor 中只进行一次断言async-no-side-effects-waitfor- 避免在 waitFor 中产生副作用async-waitfor-disappear- 使用 waitForElementToBeRemoved
3. 常见反模式(严重)
anti-unnecessary-act- 避免不必要地使用 act() 包裹anti-manual-cleanup- 移除手动清理调用anti-implementation-details- 避免测试实现细节anti-empty-waitfor- 避免使用空的 waitFor 回调anti-container-queries- 避免使用 container 进行查询anti-redundant-roles- 避免添加冗余的 ARIA 角色
4. 用户交互(高)
user-prefer-userevent- 使用 userEvent,而不是 fireEventuser-setup-before-render- 在 render 之前设置 userEventuser-await-interactions- 始终等待 userEvent 交互完成user-keyboard-for-special-keys- 使用 keyboard() 处理特殊按键user-clear-before-type- 重新输入前使用 clear()
5. 断言(高)
assert-jest-dom-matchers- 使用 jest-dom 匹配器assert-visible-over-in-document- 使用 toBeVisible() 检查可见性assert-text-content- 使用 toHaveTextContent() 检查文本assert-have-value- 使用 toHaveValue() 检查输入值assert-accessible-description- 使用 toHaveAccessibleDescription()
6. 组件设置(中)
setup-wrapper-providers- 使用 wrapper 选项配置 providerssetup-custom-render- 创建带有 providers 的自定义 rendersetup-mock-modules- 在模块级别模拟模块setup-fake-timers- 使用 fake timers 配置 userEventsetup-render-hook- 使用 renderHook 测试 hooks
7. 测试结构(中)
struct-arrange-act-assert- 遵循 Arrange-Act-Assert 模式struct-one-behavior-per-test- 每个测试只测试一种行为struct-descriptive-names- 使用描述性测试名称struct-avoid-beforeeach-render- 避免在 beforeEach 中调用 render()
8. 调试(低至中)
debug-screen-debug- 使用 screen.debug() 检查 DOMdebug-logroles- 使用 logRoles 查找可用角色debug-testing-playground- 使用 Testing Playground 编写查询
9. 无障碍测试(低)
a11y-role-queries-verify- 角色查询可验证无障碍性a11y-verify-focus- 测试焦点管理a11y-test-aria-states- 测试 ARIA 状态和属性
使用方法
阅读各个参考文件,了解详细说明和代码示例:
参考文件
| 文件 | 说明 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则模板 |
| metadata.json | 版本和参考信息 |
评论
支持 Markdown