Skip to content
文档
使用
@swc/jest

@swc/jest

为了使你的 Jest 测试运行得更快,你可以将默认的基于 JavaScript 的运行器(ts-jest)替换为使用 SWC 的 drop-in Rust 替换 (opens in a new tab)

安装

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

使用

jest.config.js 中,配置 Jest 使用 SWC:

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

它将默认从 .swcrc 加载 SWC 配置。你也可以自定义它:

jest.config.js
const fs = require('fs')
 
const config = JSON.parse(fs.readFileSync(`${__dirname}/.swcrc`, 'utf-8'))
 
module.exports = {
  transform: {
    '^.+\\.(t|j)sx?$': ['@swc/jest', { ...config, /* custom configuration in Jest */ }],
  },
}

Q & A

Q: Jest 使用 CommonJS 作为默认值。但我想要使用 ESM

A: 按照此 指南 (opens in a new tab) 设置 Jest。

对于 JavaScript,编辑 package.json 如下:

package.json
{
  // ...
  "type": "module"
}

对于 TypeScript,编辑 jest.config.js 如下:

jest.config.js
module.exports = {
  // ...
  extensionsToTreatAsEsm: ['.ts', '.tsx'],
}

使用 --experimental-vm-modules 运行测试:

cross-env NODE_OPTIONS=--experimental-vm-modules jest
 
# or
node --experimental-vm-modules ./node_modules/jest/bin/jest.js

Q: jsc.target 设置的 ECMAScript 目标是什么?

A: 默认情况下,是你的 Node 运行时支持的版本。

Node 版本默认 jsc.target
12'es2018'
13'es2019'
14'es2020'
15'es2021'
16'es2021'
17'es2022'

你可以通过在 jest.config.js 中设置一个明确的版本来自定义它:

jest.config.js
module.exports = {
    transform: {
        "^.+\\.(t|j)sx?$": [
            "@swc/jest",
            {
                jsc: {
                    target: "es2021",
                },
            },
        ],
    },
}