使用 .ts 文件 (TypeScript) 配置 Jest 全局测试设置

Posted

技术标签:

【中文标题】使用 .ts 文件 (TypeScript) 配置 Jest 全局测试设置【英文标题】:Configure Jest global tests setup with .ts file (TypeScript) 【发布时间】:2018-06-27 08:16:21 【问题描述】:

我正在使用 ts-jest(Jest 和 TypeScript)并且想要配置 所有测试套件的一些全局设置(初始化测试数据库)。

发现jest配置中有globalSetup选项:

"jest": 
    "globalSetup": "./jest-config.js"

但只有.js 文件可用于设置。我想使用.ts 文件,因为我所有的代码 包括 TypeScript 中的设置代码。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

我找到了解决办法。

我最初的项目结构是:

.
|--src
|  |--service.ts
|--tests
|  |--service.test.ts
|--dist
|--tsconfig.json 
|--package.json

package.json 中的 Jest 配置:

"jest": 
  "globals": 
    "ts-jest": 
      "tsconfig": "tsconfig.json"
    
  ,
  "moduleFileExtensions": ["ts","js"],
  "transform": 
    "^.+\\.(ts|tsx)$": "./node_modules/ts-jest/preprocessor.js"
  ,
  "testMatch": [
    "**/tests/**/*.test.(ts|js)"
  ],
  "testEnvironment": "node"

使用此配置ts-jest 在内存中执行 .ts 文件的转译。 我在compilerOptionstsconfig.json 中有outDir 选项,但在outDir 中没有写任何内容,因为我不能使用转译的jest-config.js

然后我在 src 中移动测试文件夹并更改 Jest 配置。 项目的新结构是:

.
|--src
|  |--service.ts
|  |--tests
|     |--service.test.ts
|     |--jest-config.ts
|--dist
|--tsconfig.json 
|--package.json

新的 Jest 配置是:

"jest": 
  "globalSetup": "./dist/tests/jest-config.js",
  "moduleFileExtensions": ["ts", "js", "json"],
  "testMatch": [
    "**/dist/**/*.test.js"
  ],
  "testEnvironment": "node"

现在我可以在 Jest 中使用 jest-config.js 进行全局设置。

加法

Jest 设置文件(在我的示例中为 jest-config.js)必须导出一个异步函数:

module.exports = async function() ...

在运行测试之前,您需要编译源 .ts 文件。

【讨论】:

在ts-jest项目中关于这个问题的问题:github.com/kulshekhar/ts-jest/issues/411 这会影响代码覆盖率报告。它会影响调试吗? 谢谢 - 原生 jest+typescript 支持很烂。此解决方案将所有内容都转换为 .js,然后利用玩笑。我花了几个小时试图解决 ts-jest 和 babel 废话。这个解决方案有效!谢谢!【参考方案2】:

全局设置在 ts 环境可用之前执行,因此解决方法是通过在文件开头要求 ts-node 手动创建环境。

在您的笑话配置中(package.jsonjest.config.js):

"globalSetup": "./globalSetup.ts"

然后在globalSetup.ts:

require('ts-node/register');

const setup = (): void => 
  // whatever you need to setup globally
;

export default setup;

您可以在github 上阅读有关 ts-node 的更多信息。

【讨论】:

太棒了?? 我的项目结构要求我将这些脚本放在 src 文件夹之外,这个技巧让我非常头疼。需要注意的一件事,我不得不在开玩笑的配置中使用这种形式的路径 - “/path/to/globalSetup.ts” 可以确认这对我有用。

以上是关于使用 .ts 文件 (TypeScript) 配置 Jest 全局测试设置的主要内容,如果未能解决你的问题,请参考以下文章

配置 ESLint 以将 .ts 和 .tsx 解析为 Typescript,将 .js 和 .jsx 解析为 Ecmascript

webpack配置练习typescript的web项目

nodejs把配置转ts

TypeScript的一些安装转换热更新等配置方法

typescript的入门

02-TypeScript中新的字符串