使用ts-jest进行TypeScript的单元测试配置
文章目录
- 步骤 1: 安装必要依赖
- 步骤 2: 初始化 Jest 配置文件
- 步骤 3: 配置 Jest (jest.config.js)
- 步骤 4: 配置 TypeScript (tsconfig.json)
- 步骤 5: 配置 package.json 脚本
- 步骤 6: 创建测试文件
- 步骤 7: 运行测试
- 常见问题及解决
使用 ts-jest 配置 TypeScript 单元测试是一个常见且高效的方案,它能让 Jest 直接处理 TypeScript 代码。以下是详细的配置步骤:
步骤 1: 安装必要依赖
首先需要安装核心依赖包:
# 安装 Jest 核心和 ts-jest 转换器
npm install --save-dev jest ts-jest @types/jest# 确保已安装 TypeScript(如果项目中还没有)
npm install --save-dev typescript
步骤 2: 初始化 Jest 配置文件
可以通过命令自动生成配置文件:
npx ts-jest config:init
这会创建一个 jest.config.js
文件,包含基本配置。
步骤 3: 配置 Jest (jest.config.js)
生成的配置文件可以根据需要修改,典型配置如下:
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {// 使用 ts-jest 预设preset: 'ts-jest',// 测试环境:node 或 jsdom(浏览器环境模拟)testEnvironment: 'node',// 文件扩展名处理moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],// 测试文件匹配模式testMatch: ['**/*.test.(ts|tsx)'],// 转换器配置transform: {'^.+\\.(ts|tsx)$': ['ts-jest',{// TypeScript 配置文件路径tsconfig: 'tsconfig.json',// 可选:启用隔离模块模式isolatedModules: true,},],},// 模块名称映射(处理路径别名)moduleNameMapper: {'^@/(.*)$': '<rootDir>/src/$1',},// 忽略某些文件testPathIgnorePatterns: ['/node_modules/', '/dist/'],// 覆盖率报告配置collectCoverageFrom: ['src/**/*.{ts,tsx}','!src/**/*.d.ts','!**/node_modules/**',],coverageDirectory: 'coverage',coverageReporters: ['text', 'lcov'],
};
步骤 4: 配置 TypeScript (tsconfig.json)
确保 TypeScript 配置支持测试环境,典型配置:
{"compilerOptions": {"target": "ES2020","module": "CommonJS","outDir": "./dist","rootDir": "./src","strict": true,"esModuleInterop": true,"skipLibCheck": true,"forceConsistentCasingInFileNames": true,// 允许 Jest 识别测试文件中的类型"types": ["jest"]},"include": ["src/**/*", "tests/**/*"],"exclude": ["node_modules", "dist"]
}
步骤 5: 配置 package.json 脚本
在 package.json
中添加测试脚本:
{"scripts": {"test": "jest", // 运行所有测试"test:watch": "jest --watch", // 监视模式,自动重新运行测试"test:coverage": "jest --coverage", // 生成覆盖率报告"test:ci": "jest --ci --coverage" // CI 环境使用}
}
步骤 6: 创建测试文件
测试文件通常与被测试文件放在同一目录,命名格式为 [文件名].test.ts
例如,测试 src/utils/math.ts
:
// src/utils/math.ts
export const sum = (a: number, b: number): number => a + b;
对应的测试文件:
// src/utils/math.test.ts
import { sum } from './math';describe('sum function', () => {it('should return the sum of two numbers', () => {expect(sum(2, 3)).toBe(5);expect(sum(-1, 1)).toBe(0);});
});
步骤 7: 运行测试
使用以下命令运行测试:
# 运行所有测试
npm test# 运行测试并监视文件变化
npm run test:watch# 生成覆盖率报告
npm run test:coverage
常见问题及解决
-
路径别名问题:如果在 TypeScript 中使用了路径别名(如
@/utils
),需要在jest.config.js
的moduleNameMapper
中同步配置。 -
类型定义问题:确保安装了
@types/jest
并在tsconfig.json
的types
中包含jest
。 -
测试环境选择:
- 后端项目通常用
testEnvironment: 'node'
- 前端项目通常用
testEnvironment: 'jsdom'
(需要安装jsdom
包)
- 后端项目通常用
通过以上配置,你就可以在 TypeScript 项目中使用 ts-jest 进行高效的单元测试了。这种配置既保留了 TypeScript 的类型检查优势,又能利用 Jest 强大的测试功能。