Testing Library #

什么是 Testing Library? #

Testing Library 是一组用于测试 Web 组件的实用工具库,由 Kent C. Dodds 创建。它的核心理念是"测试越接近用户使用软件的方式,测试就越可靠"。Testing Library 不关注组件的实现细节,而是关注用户如何与组件交互。

核心特点 #

特性 说明
用户为中心 测试模拟用户行为
无障碍查询 优先使用语义化查询
实现无关 不依赖组件内部细节
重构友好 重构不影响测试
多框架支持 React/Vue/Angular/Svelte
简单 API 学习曲线低

文档结构 #

本指南按以下结构组织,循序渐进地帮助你掌握 Testing Library:

1. 入门基础 #

主题 描述 文档链接
Testing Library 简介 核心理念、历史与应用场景 intro.md
安装与配置 环境搭建、依赖安装 installation.md
基础查询方法 getBy、queryBy、findBy basics.md
查询优先级 无障碍查询、语义化查询 queries.md

2. 核心功能 #

主题 描述 文档链接
用户事件 点击、输入、表单操作 events.md
异步处理 waitFor、findBy、异步操作 async.md

3. 进阶主题 #

主题 描述 文档链接
Hooks 测试 自定义 Hooks 测试方法 hooks.md
Context 测试 Context Provider 测试 context.md

4. 最佳实践 #

主题 描述 文档链接
高级技巧 自定义渲染、测试工具 advanced.md
最佳实践 测试原则、常见问题 best-practices.md

学习路径 #

入门阶段(测试新手) #

  1. 了解 Testing Library 的核心理念
  2. 安装和配置测试环境
  3. 掌握基础查询方法
  4. 理解查询优先级
  5. 编写第一个测试

进阶阶段(测试熟练) #

  1. 掌握用户事件模拟
  2. 处理异步操作测试
  3. 测试表单和验证
  4. 测试 Context 和 Hooks
  5. 编写可维护的测试

高级阶段(测试专家) #

  1. 自定义渲染器
  2. 测试工具函数封装
  3. 集成测试策略
  4. 性能测试
  5. 测试覆盖率优化

Testing Library vs Enzyme #

方面 Testing Library Enzyme
关注点 用户行为 实现细节
查询方式 无障碍查询 DOM 结构
重构友好 ✅ 是 ❌ 否
学习曲线
维护状态 活跃 已停止

快速开始 #

javascript
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import Counter from './Counter';

test('increments counter on click', async () => {
  const user = userEvent.setup();
  render(<Counter />);
  
  expect(screen.getByText('Count: 0')).toBeInTheDocument();
  
  await user.click(screen.getByRole('button', { name: /increment/i }));
  
  expect(screen.getByText('Count: 1')).toBeInTheDocument();
});

查询优先级 #

text
1. getByRole          ← 最推荐(无障碍)
   getByLabelText
   getByPlaceholderText
   getByText
   getByDisplayValue

2. getByAltText       ← 语义化
   getByTitle

3. getByTestId        ← 最后手段

应用场景 #

场景 描述
组件渲染测试 测试组件正确渲染
用户交互测试 测试点击、输入等行为
异步操作测试 测试数据加载、API 调用
表单测试 测试表单输入和验证
集成测试 测试多个组件协作

资源推荐 #

更新日志 #

  • 2026-03-28:创建初始版本,包含完整的 Testing Library 学习大纲

继续探索本指南,逐步掌握 Testing Library 技术,从新手成长为前端测试专家!

最后更新:2026-03-28