Jest - 集成
在本章中,我们将介绍如何将 Jest 与 TypeScript、Babel 和 Webpack 集成。这些集成对于测试使用 TypeScript、ES6+ 语法 或 Webpack 的 JavaScript 应用程序非常重要。最后,您将能够使用这些工具配置 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.js 或 jest.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 功能,包括 JSX、ES6+ 语法和其他实验性 JavaScript 功能。 Babel 首先处理您的代码,因此 Jest 可以使用转换后的版本运行测试。
安装依赖项
要 将 Jest 与 Babel 集成,您需要安装所需的 Babel 依赖项:
npm install --save-dev jest @babel/core @babel/preset-env @babel/preset-react babel-jest
这将安装 Jest 以及必要的 Babel 包,以便与您的项目集成。
配置 Babel
接下来,通过在项目的根目录中创建 .babelrc 或 babel.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 的模块系统和捆绑。