Logo
Section 1 / 4

Jest 和 TypeScript

学习如何使用 Jest 测试 TypeScript 应用程序。

导入

Jest 和 TypeScript

学习如何使用 Jest 测试 TypeScript 应用程序。

TypeScript 配置选项

Jest 完全兼容 TypeScript 项目,但在此环境中存在一些需要注意的细节。我们有两种方式来配置 Jest 与 TypeScript 的集成:babel 和 ts-jest。除非项目在测试环境已使用 babel 配置,否则我们认为 ts-jest 是更直接的选择。

ts-jest

该包可在我们首选的包管理器中获取,是 Jest 的 TypeScript 处理器。我们只需将测试文件扩展名从 .test.js 改为 .test.ts,并调整部分 Jest 配置即可。首先,告知 Jest 我们将使用 .ts(以及可能需要的其他 TypeScript 扩展名,如 .tsx)作为模块文件类型。可以通过更新 moduleFileExtensions 字段来实现:

1{ 2 moduleFileExtensions: ['js', 'ts'] 3}

此外,任何通过路径或正则表达式指向 JavaScript 文件的配置也需考虑 TypeScript 文件的存在。例如,若已有如下代码:

1{ 2 collectCoverageFrom: ['src/*.(js | jsx)'] 3}

则需修改为:

1{ 2 collectCoverageFrom: ['src/*.(js | jsx | ts | tsx)'] 3}

同时,还需告诉 Jest 使用 ts-jest 来处理 TypeScript 文件。为此,在 transform 字段中添加一个键值对,其中键为预期的 TypeScript 文件扩展名,值为包名称:

1{ 2 transform: { 3 '\\.(ts|tsx)$': 'ts-jest' 4 } 5}

babel-jest

如果项目中已经使用了 Babel 配置(或希望引入),可以使用它来支持 TypeScript。

Jest 的 Babel 配置需要以下几个依赖包:

  • babel-jest
  • @babel/core
  • @babel/preset-env

可通过 yarn add --dev babel-jest @babel/core @babel/preset-env 安装。

安装完成后,需在项目中配置 Babel,可通过 package.json 文件或单独的 babel.config.js 文件完成:

No configuration found for ID: 3e46e199c0aa45e76a61fbbe33da5cc37570ebbdbf512af5184b0fe420e02a66

No configuration found for ID: 6833ce1aed8c15358724fbf2e5a6303abcadb0369d9af05ab5b3322ea0816536

为启用 TypeScript 支持,还需额外安装一个包:yarn add --dev @babel/preset-typescript,并将其加入配置中:

No configuration found for ID: bdba77f33b37caaa9f452a7edceab60e8a9ef1c7a1acd1e6e13d5ab652fe51da

No configuration found for ID: de21b7768d4e559406993127e83be694de83d3939589ad2f8c2df386bc246c2c

@types/jest

除了配置 Jest 以支持 TypeScript 代码外,能够在测试环境中使用类型信息也非常有帮助。虽然 Jest 本身不提供 TypeScript 类型定义,但它提供了完善的 Definitely Typed 包,可通过安装 @types/jest 获得。

安装此包后,可以直接使用 Jest 的类型定义,这在确保匹配器正确使用、编写有效模拟(mock)时非常有用。利用泛型功能尤其有益,因为它能让我们更轻松地编写代码库的模拟。同时,也能基于类型信息进行断言测试,例如使用 typeof 等操作。

简介

测试的构成