Jest - 集成

在本章中,我们将介绍如何将 Jest 与 TypeScriptBabelWebpack 集成。这些集成对于测试使用 TypeScriptES6+ 语法WebpackJavaScript 应用程序非常重要。最后,您将能够使用这些工具配置 Jest 以进行高效测试。

Jest - TypeScript 集成

Jest 可以与 TypeScript 集成,以直接在 TypeScript 文件上运行测试。此设置允许 Jest 处理 TypeScript 代码而无需预编译,从而使测试过程更顺畅、更高效。

安装依赖项

要开始使用 Jest 和 TypeScript,您首先需要安装必要的依赖项:

npm install --save-dev jest typescript ts-jest @types/jest

为 TypeScript 配置 Jest

安装依赖项后,下一步是配置 Jest 以使用 TypeScript。

创建一个 Jest 配置文件,通常命名为 jest.config.jsjest.config.ts(如果您使用 TypeScript 进行 Jest 配置)。

module.exports = {
    preset: 'ts-jest', // 使用 ts-jest 预设处理 TypeScript 文件
    testEnvironment: 'node', // 定义测试环境(对于类似浏览器的测试,可以是 'jsdom')
    moduleFileExtensions: ['ts', 'tsx', 'js'], // 添加 TypeScript 扩展
    transform: {
        '^.+\.tsx?$': 'ts-jest', // 使用 ts-jest 转换 TypeScript 文件
    },
};

此设置告诉 Jest 使用 ts-jest 处理 TypeScript 文件。

使用 TypeScript 编写测试

一切设置完成后,您可以开始使用 TypeScript 编写测试。 Jest 将自动处理和编译 .ts .tsx 文件。

// math.ts
export const add = (a: number, b: number): number => a + b;

// math.test.ts
import { add } from './math';

test('adds two numbers', () => {
    expect(add(1, 2)).toBe(3);
});

要运行测试,只需使用:

npx jest

此设置允许您直接测试 TypeScript 代码,并完全支持类型检查接口

Jest - Babel 集成

Jest 与 Babel 集成以支持最新的 ECMAScript 功能,包括 JSXES6+ 语法和其他实验性 JavaScript 功能。 Babel 首先处理您的代码,因此 Jest 可以使用转换后的版本运行测试。

安装依赖项

将 Jest 与 Babel 集成,您需要安装所需的 Babel 依赖项:

npm install --save-dev jest @babel/core @babel/preset-env @babel/preset-react babel-jest

这将安装 Jest 以及必要的 Babel 包,以便与您的项目集成。

配置 Babel

接下来,通过在项目的根目录中创建 .babelrcbabel.config.js 文件来设置 Babel。

{
    "presets": ["@babel/preset-env", "@babel/preset-react"]
}

这将配置 Babel 以处理 ES6+ 和 React 代码。

为 Babel 配置 Jest

Jest 使用 babel-jest 来转换 JavaScript 文件。为确保 Jest 使用 Babel 处理 JavaScript 和 JSX 文件,请像这样更新您的 jest.config.js:

module.exports = {
    transform: {
        '^.+\.jsx?$': 'babel-jest', // 使用 Babel 处理 JS 和 JSX 文件
    },
    testEnvironment: 'jsdom', // 测试 React 组件所必需
};

使用 Babel 编写测试

使用此配置,Jest 将能够运行包含 ES6+、JSX 和其他现代 JavaScript 语法的测试。以下是一个简单的 React 测试示例:

// MyComponent.jsx
import React from 'react';

const MyComponent = () => <div>Hello, world!</div>;

export default MyComponent;

// MyComponent.test.jsx
import { render } from '@testing-library/react';
import MyComponent from './MyComponent';

test('renders Hello, world!', () => {
    render(<MyComponent />);
    expect(screen.getByText('Hello, world!')).toBeInTheDocument();
});

设置 Babel 后,只需使用以下命令运行测试:

npx jest

Jest 将在运行测试之前使用 Babel 转译您的代码。

Jest - Webpack 集成

将 Jest 与 Webpack 集成在测试使用 Webpack 功能(如导入、静态资产或自定义模块)的代码时很有用。

安装依赖项

首先安装必要的Webpack 相关依赖项。这将设置 Jest、Webpack 和 Babel 集成:

npm install --save-dev jest-webpack babel-jest webpack webpack-cli

配置 Webpack

接下来,创建或修改您的 webpack.config.js 文件以定义 Webpack 应如何捆绑您的代码。如果您将 Babel 与 Webpack 一起使用,您的配置可能如下所示:

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js',
    },
    module: {
        rules: [
        {
            test: /\.js$/,
            exclude: /node_modules/,
            use: {
            loader: 'babel-loader',
            options: {
                presets: ['@babel/preset-env', '@babel/preset-react'],
            },
            },
        },
        ],
    },
};

此配置告诉 Webpack 使用 Babel 捆绑 JavaScript 和 React 文件。

配置 Jest 以使用 Webpack

要使 Jest 了解 Webpack 的捆绑系统,请更新您的 jest.config.js 文件:

module.exports = {
    preset: 'jest-webpack', // 使用与 Webpack 相关的 Jest 设置
    transform: {
        '^.+\.jsx?$': 'babel-jest', // 将 Babel 用于 JS 和 JSX 文件
    },
    moduleNameMapper: {
        '\.css$': 'identity-obj-proxy', // 映射静态资产(例如 CSS 文件)
    },
};

编写测试

现在 Jest 和 Webpack 已集成,您可以开始编写测试。以下是一个简单的 React 测试示例:

// MyComponent.jsx
import React from 'react';

const MyComponent = () => <div>Hello, world!</div>;

export default MyComponent;

// MyComponent.test.jsx
import { render, screen } from '@testing-library/react';
import MyComponent from './MyComponent';

test('renders Hello, world!', () => {
    render(<MyComponent />);
    expect(screen.getByText('Hello, world!')).toBeInTheDocument();
});

此测试检查 MyComponent 是否正确呈现文本"Hello, world!"。

要运行测试,请执行以下命令:

npx jest

Jest 将在运行测试时处理 Webpack 的模块系统和捆绑。