如何在 Jest 中测试定时器(setTimeout、setInterval)?如何使用假定时器?Jest 提供了多种处理定时器的方法,用于测试涉及 setTimeout、setInterval 等定时器的代码:
**1. 使用假定时器:**
```javascript
jest.useFakeTimers();
test('timer callback', () => {
const callback = jest.fn();
setTimeout(callback, 1000);
jest.runAllTimers();
expect(callback).toHaveBeenCalledTimes(1);
});
```
**2. 运行所有定时器:**...
服务端 · 2月19日 13:18
Jest 中的生命周期钩子有哪些?beforeAll、afterAll、beforeEach 和 afterEach 如何使用?Jest 提供了多个生命周期钩子函数来管理测试的设置和清理:
**beforeAll:**
- 在当前测试套件的所有测试运行之前执行一次
- 适用于一次性设置,如数据库连接
- 示例:`beforeAll(() => { connectDatabase(); });`
**afterAll:**
- 在当前测试套件的所有测试运行之后执行一次
- 适用于清理资源,如关闭数据库连接
- 示例:`afterAll(() => { disconnectDatabase(); });`
**beforeEach:**
- 在当前测试套件的每个测试运行之前执行
- 适用于每个测试的独立设置,如...
服务端 · 2月19日 13:16
如何在 Jest 中进行参数化测试?如何使用 test.each 和 describe.each?Jest 提供了参数化测试的方法,可以使用 `test.each` 或 `describe.each` 来运行多组测试数据:
**1. 使用 test.each 进行参数化测试:**
```javascript
test.each([
[1, 1, 2],
[1, 2, 3],
[2, 1, 3],
])('adds %i + %i = %i', (a, b, expected) => {
expect(add(a, b)).toBe(expected);
});
```
**2. 使用对象数组:**
```javascript
test.each([
{ a: ...
服务端 · 2月19日 13:19
Jest 中常用的断言方法有哪些?如何使用 expect 和匹配器?Jest 提供了丰富的断言方法,主要通过 `expect()` 函数配合匹配器(matchers)使用:
**常用匹配器:**
**相等性匹配器:**
- `toBe(value)`:严格相等(使用 `===`)
- `toEqual(value)`:深度相等(递归比较对象和数组)
- `toMatchObject(object)`:部分匹配对象属性
- `toStrictEqual(value)`:严格深度相等(包括 undefined 属性)
**真值匹配器:**
- `toBeNull()`:只匹配 null
- `toBeUndefined()`:只匹配 undefined...
服务端 · 2月19日 13:15
什么是 Jest 快照测试?如何使用快照测试来验证组件输出?Jest 的快照测试(Snapshot Testing)是一种强大的测试工具,用于确保 UI 组件或数据结构不会意外改变:
**快照测试原理:**
- 首次运行时,Jest 会捕获组件的渲染输出并保存为快照文件
- 后续运行时,将当前输出与保存的快照进行比较
- 如果输出发生变化,测试会失败并提示差异
**基本用法:**
```javascript
import renderer from 'react-test-renderer';
import Button from './Button';
test('Button snapshot', () => {
const tre...
服务端 · 2月19日 13:16
Jest 中的 Mock 功能如何使用?如何创建 Mock 函数和模拟模块?Jest 的 Mock 功能是测试中隔离依赖和验证行为的重要工具:
**1. 创建 Mock 函数:**
```javascript
const mockFn = jest.fn();
mockFn('arg1', 'arg2');
expect(mockFn).toHaveBeenCalledWith('arg1', 'arg2');
expect(mockFn).toHaveBeenCalledTimes(1);
```
**2. Mock 返回值:**
```javascript
const mockFn = jest.fn();
mockFn.mockReturnValue(...
服务端 · 2月19日 13:16
什么是 Jest 测试框架?它有哪些核心特性?Jest 是 Facebook 开发的 JavaScript 测试框架,它具有零配置、内置断言库、快照测试、模拟系统和覆盖率报告等特点。Jest 支持并行测试执行,可以显著提高测试速度。它还提供了强大的 CLI 工具和丰富的 API,使得编写测试变得简单直观。Jest 适用于测试 React 组件、Node.js 应用程序以及各种 JavaScript 项目。
**核心特性:**
- 零配置:开箱即用,无需复杂配置
- 内置断言:提供丰富的断言方法
- 快照测试:轻松捕获组件输出
- 模拟系统:强大的 mock 和 spy 功能
- 并行执行:自动并行运行测试
- 覆盖率报告:内置代码...
服务端 · 2月19日 13:15
如何在 Jest 中生成和配置代码覆盖率报告?覆盖率指标有哪些?Jest 提供了强大的代码覆盖率报告功能,帮助开发者了解测试覆盖情况:
**生成覆盖率报告:**
```bash
# 运行测试并生成覆盖率报告
jest --coverage
# 或在 package.json 中配置
{
"scripts": {
"test:coverage": "jest --coverage"
}
}
```
**覆盖率指标:**
- **Statements(语句覆盖率)**:被执行的代码语句百分比
- **Branches(分支覆盖率)**:被执行的条件分支百分比
- **Functions(函数覆盖率)**:被调用的函数百分比
- **...
服务端 · 2月19日 13:16
如何在 Jest 中运行和调试测试?常用的命令行选项有哪些?Jest 提供了多种运行测试和调试测试的方法:
**运行测试:**
```bash
# 运行所有测试
jest
# 运行特定文件
jest path/to/test.spec.js
# 运行匹配模式的测试
jest --testNamePattern="should add"
# 监听模式(文件变化时自动运行)
jest --watch
# 只运行失败的测试
jest --onlyFailures
# 运行修改过的文件相关测试
jest --onlyChanged
```
**调试测试:**
**1. 使用 console.log:**
```javascript
tes...
服务端 · 2月19日 13:17
