Jest进阶知识:整合 TypeScript - 提升单元测试的类型安全与可靠性

引言

在现代软件开发中,TypeScript 以其静态类型检查的优势,成为越来越多开发者的选择。而 Jest 是一个功能强大的 JavaScript 测试框架,支持各种测试场景。本文将详细介绍如何在基于 TypeScript 的项目中集成 Jest 测试框架,实现更高的类型安全和可靠性。通过实际示例,展示如何准备项目环境、配置 TypeScript 和 Jest,以及编写和运行测试用例。

准备工作
初始化项目

首先,我们需要初始化一个新的项目。在项目根目录下运行以下命令:

sh 复制代码
npm init -y
安装 TypeScript

接下来,安装 TypeScript:

sh 复制代码
npm install typescript --save-dev
生成 TypeScript 配置文件

生成 TypeScript 配置文件 tsconfig.json

sh 复制代码
npx tsc --init
安装 Node 类型说明文件

因为项目在 Node 环境中运行,需要安装 Node 的类型说明文件:

sh 复制代码
npm install @types/node --save-dev
解决 CommonJS 模块化问题

在 Node 环境中,如果模块化使用的是 CommonJS 规范,可能会出现"无法重新声明块范围变量"的问题。这是因为 CommonJS 规范中没有像 ESModule 中的闭包模块概念,所有模块在引用时会被抛到全局。为了解决这个问题,需要在 tsconfig.json 中开启 esModuleInterop 配置项,并在每个模块文件的最后一行添加 export {},让 TypeScript 认为这是一个 ESModule。

json 复制代码
{
  "compilerOptions": {
    "esModuleInterop": true,
    "outDir": "./dist",
    "target": "ES2015",
    "module": "CommonJS"
  },
  "include": ["./src"]
}

tools.ts 文件的最后一行添加:

ts 复制代码
export {};
配置编译输出目录

tsconfig.json 中配置编译后的 JavaScript 文件存储目录:

json 复制代码
{
  "compilerOptions": {
    "outDir": "./dist",
    "target": "ES2015",
    "module": "CommonJS",
    "esModuleInterop": true
  },
  "include": ["./src"]
}
使用 Jest 测试
安装 Jest

安装 Jest 测试框架:

sh 复制代码
npm install --save-dev jest

生成 Jest 配置文件:

sh 复制代码
npx jest --init
创建测试文件

src 目录下创建 __tests__ 目录,并在其中新增测试套件。每个函数对应一个测试套件,在测试套件中针对不同的参数编写测试用例。

例如,创建 randomNum.test.ts 文件:

ts 复制代码
const { randomNum } = require("../utils/tools");

test("测试随机数", () => {
  // 得到一个 4 位数的数组
  const result = randomNum();
  expect(result.length).toBe(4);
  expect(new Set(result).size).toBe(4);
  result.forEach((num: number) => {
    expect(num).toBeGreaterThanOrEqual(0);
    expect(num).toBeLessThanOrEqual(9);
  });
});

export {};

创建 isRepeat.test.ts 文件:

ts 复制代码
const { isRepeat } = require("../utils/tools");

test("参数为 string 类型数组", () => {
  expect(isRepeat(["1", "1", "2", "3"])).toBe(true);
  expect(isRepeat(["1", "4", "2", "3"])).toBe(false);
});

test("参数为 number 类型数组", () => {
  expect(isRepeat([1, 1, 2, 3])).toBe(true);
  expect(isRepeat([1, 4, 5, 6])).toBe(false);
});

export {};
安装 Jest 类型说明文件

在编写测试用例时,TypeScript 会报错,提示找不到 Jest 相关的类型说明。为了解决这个问题,需要安装 Jest 的类型说明文件:

sh 复制代码
npm install @types/jest --save-dev
安装 ts-jest

为了在使用 Jest 测试 TypeScript 代码时直接运行 TypeScript 代码,需要安装 ts-jest

sh 复制代码
npm install ts-jest --save-dev
修改 Jest 配置文件

修改 Jest 配置文件 jest.config.js,将 preset 修改为 ts-jest

js 复制代码
module.exports = {
  preset: "ts-jest",
  testEnvironment: "node",
  testMatch: ["**/__tests__/**/*.ts"],
  transform: {
    "^.+\\.tsx?$": "ts-jest",
  },
  moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
};
运行测试

package.json 中添加测试脚本:

json 复制代码
{
  "scripts": {
    "test": "jest"
  }
}

运行测试:

sh 复制代码
npm test
总结

通过本文的介绍,你已经学会了如何在基于 TypeScript 的项目中集成 Jest 测试框架。通过合理的配置,可以实现更高的类型安全和可靠性。以下是整合过程中的关键步骤:

  1. 初始化项目 :使用 npm init -y 初始化项目。
  2. 安装 TypeScript:安装 TypeScript 并生成配置文件。
  3. 解决 CommonJS 模块化问题 :开启 esModuleInterop 配置项并在每个模块文件中添加 export {}
  4. 配置编译输出目录 :在 tsconfig.json 中配置编译后的 JavaScript 文件存储目录。
  5. 安装 Jest:安装 Jest 测试框架并生成配置文件。
  6. 创建测试文件 :在 src 目录下创建 __tests__ 目录,并编写测试用例。
  7. 安装 Jest 类型说明文件:安装 Jest 的类型说明文件。
  8. 安装 ts-jest :安装 ts-jest 以支持直接运行 TypeScript 代码。
  9. 修改 Jest 配置文件 :将 preset 修改为 ts-jest
  10. 运行测试 :在 package.json 中添加测试脚本并运行测试。

总之,使用 Jest 和 TypeScript 的结合,可以帮助开发者在单元测试中实现更高的类型安全和可靠性。希望本文的介绍和示例能帮助你在实际开发中更好地应用这一强大工具。

相关推荐
迷雾漫步者1 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-1 小时前
验证码机制
前端·后端
燃先生._.2 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖3 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235243 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240254 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar4 小时前
纯前端实现更新检测
开发语言·前端·javascript
寻找沙漠的人5 小时前
前端知识补充—CSS
前端·css
GISer_Jing5 小时前
2025前端面试热门题目——计算机网络篇
前端·计算机网络·面试