Jest 需要 10 秒才能运行两个简单的 TypeScript 测试,我如何确定它为什么慢?

问题描述 投票:0回答:3

我尝试使用 Jest 运行一些 TypeScript 测试,但速度很慢,需要 10 秒才能运行以下测试:

import "jest"

test("good", () => {
  expect(2).toBe(2)
})

test("bad", () => {
  expect(2).toBe(3)
})

我也在 --watch 模式下运行它,并且当文件更改时它运行了相同的 10 秒。

我在一个大型项目中使用 TypeScript。虽然示例文件中没有导入任何模块,但 tsconfig.json 具有整个项目的路径。

如何确定 Jest 运行如此缓慢的原因,以便找出加快速度的方法?


如果我创建一个具有相同测试的 .js 文件,并删除导入行,速度会很快。这可能表明与 TypeScript 方面有关。

typescript jestjs
3个回答
22
投票

通过在配置中使用

isolatedModules: true
,我获得了显着的加速。

我的配置现在如下所示:

/** @type {import('@ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
  preset: "ts-jest",
  testEnvironment: "node",
  globals: {
    "ts-jest": {
      isolatedModules: true,
    },
  },
  transform: {
    "^.+\\.jsx?$": "babel-jest",
  },
  moduleNameMapper: {
    // ...removed...
  },
  moduleDirectories: ["js", ".", "node_modules"],
}


5
投票

设置

isolatedModules: true
也加快了我的测试速度(它似乎禁用了打字稿编译器类型检查)。

由于在

ts-jest
下定义
globals
配置已被弃用,最好使用
transform
设置它:

transform: {
  '^.+\\.ts?$': ['ts-jest', { isolatedModules: true }],
},

0
投票

考虑用

SWC Jest
替换默认的 ts-jest 跑步者。它似乎是一个直接替代品,但速度更快。就我而言,对于一个简单的测试,执行时间从 5 秒下降到 1 毫秒。

首先安装SWC Jest:

npm i -D jest @swc/core @swc/jest

然后在你的

jest.config.js
中使用它:

module.exports = {
  transform: {
    "^.+\\.(t|j)sx?$": "@swc/jest",
  },
};

isolatedModules: true
技巧不同,这实际上可以在不与
module
moduleResolution
混淆的情况下工作(参见 here)。

© www.soinside.com 2019 - 2024. All rights reserved.