You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vite项目中Jest测试报错:test和expect未定义的解决方法

解决Vite项目中Jest测试test/expect未定义问题

问题场景

在基于Vite的network-app项目中运行Jest测试时,App.test.jsx文件内的test和expect函数提示未定义。

项目配置与测试代码

Package.json

{
  "name": "network-app",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
       "dev": "vite",
       "build": "vite build",
       "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0",
       "preview": "vite preview",
       "test": "jest"
  },
  "dependencies": {
       "react": "^18.2.0",
       "react-dom": "^18.2.0"
  },
  "devDependencies": {
       "@testing-library/jest-dom": "^5.16.5",
       "@testing-library/react": "^14.0.0",
       "@testing-library/user-event": "^14.4.3",
       "@types/jest": "^29.5.1",
       "@types/react": "^18.0.28",
       "@types/react-dom": "^18.0.11",
       "@vitejs/plugin-react": "^4.0.0",
       "eslint": "^8.38.0",
       "eslint-plugin-react": "^7.32.2",
       "eslint-plugin-react-hooks": "^4.6.0",
       "eslint-plugin-react-refresh": "^0.3.4",
       "jest": "^29.5.0",
       "vite": "^4.3.2"
 }
}

App.test.jsx

test('Renders main page correctly', () => {
    expect(true).toBeTruthy();
});

解决方案

方案1:配置Jest全局变量与ES模块支持

项目启用了"type": "module",导致Jest默认全局变量未被识别。需创建Jest配置文件并配合Babel处理ES模块:

  1. 安装必要依赖:
npm install --save-dev babel-jest @babel/preset-env @babel/preset-react
  1. 创建jest.config.js:
export default {
  testEnvironment: 'jsdom', // 适配React浏览器环境
  transform: {
    '^.+\\.(js|jsx)$': 'babel-jest' // 用Babel转换JS/JSX文件
  }
};
  1. 创建.babelrc配置文件:
{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }],
    "@babel/preset-react"
  ]
}

配置完成后,Jest会自动注入test、expect等全局变量,同时正确处理ES模块和JSX语法。

方案2:显式导入测试函数

若不想配置Babel,可在测试文件顶部直接导入Jest的测试函数:

import { test, expect } from '@jest/globals';

test('Renders main page correctly', () => {
    expect(true).toBeTruthy();
});

方案3:确认Jest环境配置

确保Jest使用jsdom环境适配React组件测试,这会让全局变量在测试环境中正常生效。如果已有jest.config.js,检查testEnvironment字段是否设置为jsdom。

内容的提问来源于stack exchange,提问作者Ryu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:27:40