运行测试时出现TypeError: jest.mock is not a function错误如何解决
TypeError: jest.mock is not a function 报错解决方案 核心原因
jest.mock 是Jest测试框架专属的全局API,出现该报错的本质是当前测试运行环境未正确注入Jest全局变量,常见触发场景如下:
- 测试运行器不是Jest,使用了Vitest、Mocha等不内置
jest全局对象的测试框架 - Jest配置中关闭了全局变量注入
- 项目未正确安装Jest相关依赖包
解决步骤
1. 确认测试运行器类型
- 若使用Vitest作为测试运行器:将代码中所有
jest.mock替换为vi.mock,可在vite配置中开启test.global = true注入vi全局对象,或在测试文件顶部手动导入import { vi } from 'vitest' - 若确实需要使用Jest:确认package.json的测试脚本是调用jest执行测试,而非其他测试工具
2. 修正Jest配置
打开Jest配置文件(jest.config.js/jest.config.ts/package.json的jest字段),确认injectGlobals配置为true:
module.exports = { // 其他配置... injectGlobals: true }
如果需要保持injectGlobals: false,则需要在每个测试文件顶部手动导入jest对象:
import { jest } from '@jest/globals'
3. 重装依赖
执行以下命令重装Jest相关依赖,避免依赖缺失或损坏:
npm install jest @types/jest ts-jest --save-dev
依赖安装完成后重启测试服务即可。
4. 测试代码逻辑修正
你提供的测试代码中存在重复调用render的问题:全局定义的第二个beforeEach会在每个测试用例执行前先调用一次render触发接口请求,测试用例内部又调用了一次render,会导致getUsers调用次数不符合预期,建议删除全局的第二个beforeEach,调整后测试逻辑即可正常运行。
内容的提问来源于stack exchange,提问作者user2024080
相关产品推荐
相关产品推荐

