核心特性
Jest 的设计哲学和关键技术特性
零配置测试
开箱即用,无需复杂配置。自动发现测试文件,支持ES6、TypeScript、JSX等语法。
快照测试
组件快照测试,捕获UI变化。适合React、Vue等组件库的回归测试。
并行测试
多进程并行执行测试,提升测试速度。智能测试调度,优化测试性能。
丰富的断言
提供丰富的断言API,支持链式调用。expect、toBe、toEqual等常用断言。
生态系统
围绕 Jest 构建的完整工具链
框架集成
React Testing Library、Vue Test Utils等框架测试工具。提供组件测试最佳实践。
覆盖率报告
内置代码覆盖率工具,支持HTML、LCOV等格式。可视化覆盖率报告,找出未测试代码。
Mock系统
强大的Mock系统,支持函数、模块、定时器等Mock。模拟外部依赖,隔离测试环境。
TypeScript支持
通过ts-jest支持TypeScript测试。类型安全的测试编写和断言。
快照序列化
支持自定义快照序列化器。可序列化React组件、DOM元素、CSS样式等。
全局测试环境
支持jsdom、node等测试环境。模拟浏览器或Node.js环境运行测试。
快速入门
# 安装Jest
npm install jest --save-dev
# 创建测试文件
echo 'function sum(a, b) {
return a + b;
}
test("adds 1 + 2 to equal 3", () => {
expect(sum(1, 2)).toBe(3);
});' > sum.test.js
# 运行测试
npx jest
# 运行所有测试
npx jest --watchAll
# 生成覆盖率报告
npx jest --coverage
配置示例
// jest.config.js
module.exports = {
// 测试环境
testEnvironment: 'jsdom',
// 测试文件匹配模式
testMatch: [
'**/__tests__/**/*.[jt]s?(x)',
'**/?(*.)+(spec|test).[jt]s?(x)'
],
// 模块文件扩展名
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'],
// 转换配置
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
'^.+\\.(js|jsx)$': 'babel-jest'
},
// 模块名称映射
moduleNameMapper: {
'\\.(css|less|scss)$': 'identity-obj-proxy',
'\\.(jpg|jpeg|png|gif|svg)$': '<rootDir>/__mocks__/fileMock.js'
},
// 覆盖率配置
collectCoverageFrom: [
'src/**/*.{js,jsx,ts,tsx}',
'!src/**/*.d.ts'
],
// 覆盖率阈值
coverageThreshold: {
global: {
branches: 80,
functions: 80,
lines: 80,
statements: 80
}
}
};
学习资源
与其他测试框架对比
vs Vitest
Jest生态更成熟,社区更大。Vitest性能更好,与Vite集成更紧密,配置更简单。
vs Mocha
Jest功能更丰富,内置断言和Mock。Mocha更灵活,需要搭配其他库使用。
vs Jasmine
Jest基于Jasmine,功能更强大。Jasmine更轻量,适合简单项目。