Jest

JavaScript测试框架,简单易用,功能丰富。由Facebook开发维护,是React生态的标准测试框架。

2014发布年份
Facebook开发团队

核心特性

Jest 的设计哲学和关键技术特性

零配置测试

开箱即用,无需复杂配置。自动发现测试文件,支持ES6、TypeScript、JSX等语法。

零配置自动发现开箱即用

快照测试

组件快照测试,捕获UI变化。适合React、Vue等组件库的回归测试。

快照测试UI回归组件测试

并行测试

多进程并行执行测试,提升测试速度。智能测试调度,优化测试性能。

并行执行多进程性能优化

丰富的断言

提供丰富的断言API,支持链式调用。expect、toBe、toEqual等常用断言。

expecttoBetoEqual

生态系统

围绕 Jest 构建的完整工具链

框架集成

React Testing Library、Vue Test Utils等框架测试工具。提供组件测试最佳实践。

@testing-library/react@vue/test-utils组件测试

覆盖率报告

内置代码覆盖率工具,支持HTML、LCOV等格式。可视化覆盖率报告,找出未测试代码。

coverageIstanbul代码覆盖

Mock系统

强大的Mock系统,支持函数、模块、定时器等Mock。模拟外部依赖,隔离测试环境。

jest.fn()jest.mock()Mock

TypeScript支持

通过ts-jest支持TypeScript测试。类型安全的测试编写和断言。

ts-jestTypeScript类型安全

快照序列化

支持自定义快照序列化器。可序列化React组件、DOM元素、CSS样式等。

snapshot-serializers自定义序列化组件快照

全局测试环境

支持jsdom、node等测试环境。模拟浏览器或Node.js环境运行测试。

jsdomnode测试环境

快速入门

# 安装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
        }
    }
};

学习资源

官方文档

全面的API参考、配置指南和最佳实践。

jestjs.io/docs →

Jest GitHub

源代码仓库,可查看源码和参与贡献。

github.com/facebook/jest →

Jest配置生成器

在线生成Jest配置的工具。

Configuration →

Testing Library

测试库最佳实践和文档。

testing-library.com →

与其他测试框架对比

vs Vitest

Jest生态更成熟,社区更大。Vitest性能更好,与Vite集成更紧密,配置更简单。

生态系统性能Vite集成

vs Mocha

Jest功能更丰富,内置断言和Mock。Mocha更灵活,需要搭配其他库使用。

功能丰富度灵活性配置

vs Jasmine

Jest基于Jasmine,功能更强大。Jasmine更轻量,适合简单项目。

功能强大轻量级项目规模