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

edA*_*a-y 8 typescript jestjs

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

import "jest"

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

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

Run Code Online (Sandbox Code Playgroud)

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

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

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


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

edA*_*a-y 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"],
}

Run Code Online (Sandbox Code Playgroud)

  • 但问题是......“我如何确定为什么它很慢?”。这里没有回答。 (3认同)

Joa*_*gel 5

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

由于不推荐使用ts-jest下面的定义配置globals,因此最好使用以下命令进行设置transform

transform: {
  '^.+\\.ts?$': ['ts-jest', { isolatedModules: true }],
},
Run Code Online (Sandbox Code Playgroud)