Jest 配置

本文介绍了如何在Node.js环境中安装和配置Jest以支持ESM,包括配置Node.js支持ESM、使用Babel处理.js和.ts文件,以及如何为React项目集成Jest进行测试,涉及babel-preset-react、testing-library等工具。
摘要由CSDN通过智能技术生成

1、Jest 安装

pnpm add -D jest

初始化 Jest 配置文件

pnpm jest --init

2、Jest支持ESM

安装完 Jest 后,在 Jest 的测试文件中使用 import 会抛异常。

测试文件中的代码:

import sum from './sum';

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

报错信息:

问题原因是 nodejs 环境下默认是不支持 ESM。

解决方案:

1、配置 Nodejs 支持ESM

在 package.json 内增加 type 配置,并把 jest 的执行语句替换为 "NODE_OPTIONS=--experimental-vm-modules jest",如下:

// package.json
{
  ...,
  "type": "module",
  "scripts": {
    "test": "NODE_OPTIONS=--experimental-vm-modules jest"
  }
}

2、使用 Babel 转码

安装 babel 相关依赖

yarn add --dev babel-jest @babel/core @babel/preset-env

配置 babel.config.js

// babel.config.js

module.exports = {
  presets: [
    ['@babel/preset-env', {targets: { node: 'current' }}]
  ]
};

以上的办法只能解决 .js 中使用 import 的情况,对 .ts 无效,要支持 .ts 中也能使用 import,则需要在 jest.config.js 文件中添加如下配置:

// jest.config.js
const config = {
  ...,
  extensionsToTreatAsEsm: ['.ts']
}

3、Jest支持React 

1、安装依赖
pnpm i @babel/preset-react @testing-library/jest-dom @testing-library/react jest-environment-jsdom --save-dev

@babel/preset-react: 该插件将 JSX 转换为 JavaScript,从而使 Jest 能够正确解析和测试 JSX

@testing-library/jest-dom: 该插件拓展了一些jest匹配器,可以使测试用例更具声明性且更易于阅读和维护

@testing-library/react: 用于测试React组件的库

jest-environment-jsdom: jsdom是一个类似浏览器的环境,Jest 28及以上版本不再内置jsdom插件,需要单独安装

2、配置babel

修改 babel.config.js

export default {
    presets: [
      ['@babel/preset-react']
    ]
};
3、修改Jest配置
const config = {
    collectCoverage: true,
    testEnvironment: 'jsdom',
    extensionsToTreatAsEsm: ['.ts', '.jsx'],
    collectCoverageFrom: [
        '**src/**/*.{js,ts,jsx}',
        '!**/node_modules/**',
        '!**/vendor/**',
    ],
};
  
export default config;
4、测试代码
4.1、组件代码
// App.jsx
import React from 'react';

const App = () => {
    return (<div>Hello world</div>);
};

export default App;
4.2、测试代码
// app.test.js
import React from 'react';
import '@testing-library/jest-dom';
import { render } from '@testing-library/react';
import App from './App';

test('renders the correct text', () => {
    const { getByText } = render(<App />);
    const textElement = getByText(/Hello world/i);
    expect(textElement).toBeInTheDocument();
})

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
jest.config.js是用于配置Jest测试框架的文件。它允许你自定义Jest的行为和设置,以满足你的项目需求。下面是一些常见的配置选项: 1. `preset`: 用于指定预设配置,可以是一个字符串或一个包含配置选项的对象。预设配置可以帮助你快速设置常见的测试环境,例如`@vue/cli-plugin-unit-jest`用于Vue项目。 2. `testEnvironment`: 指定测试运行的环境,默认为`jsdom`,可以是`node`、`jsdom`或者自定义的环境。 3. `testMatch`: 指定要运行的测试文件的匹配模式,默认为`**/__tests__/**/*.[jt]s?(x)`。你可以根据自己的项目结构和命名规范来修改。 4. `moduleFileExtensions`: 指定模块文件的扩展名,默认为`['js', 'json', 'jsx', 'ts', 'tsx', 'node']`。如果你的项目使用了其他扩展名的文件,可以在这里添加。 5. `transform`: 配置文件转换器,用于将不同类型的文件转换为可执行的JavaScript代码。例如,使用`babel-jest`可以将ES6代码转换为ES5代码。 6. `coverageThreshold`: 配置代码覆盖率的阈值,可以设置全局或每个文件的覆盖率要求。 7. `setupFilesAfterEnv`: 指定在运行测试之前需要执行的文件,可以用于设置全局的测试环境。 8. `snapshotSerializers`: 配置快照序列化器,用于自定义快照的序列化和反序列化过程。 9. `globals`: 全局变量的配置,可以在测试文件中直接使用。 以上是一些常见的配置选项,你可以根据自己的需求进行配置。如果你有具体的问题或需要更详细的介绍,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值