React应用测试出现ReferenceError: expect is not defined报错如何解决?
问题成因
该ReferenceError: expect is not defined报错出现在@testing-library/jest-dom的初始化阶段,核心原因是jest的全局expectAPI没有被提前加载,导致jest-dom扩展匹配器时找不到目标对象,结合你提供的配置常见触发点如下:
- react-scripts@4.0.3 要求测试前置配置文件必须命名为
setupTests.js且放在src根目录下,文件命名错误、位置错误都会导致配置不生效 - 你当前的配置中没有正确配置jest的
setupFilesAfterEnv参数,jest-dom的导入时机早于jest全局变量初始化 - 依赖缓存或安装冲突导致内置jest的全局变量暴露异常
解决方法
按以下步骤依次排查操作即可解决:
- 确认
src目录下存在正确命名的setupTests.js文件,将文件内容替换为:
import '@testing-library/jest-dom/extend-expect';
注意不要使用import '@testing-library/jest-dom'的简写写法,react-scripts@4对该写法兼容存在缺陷。
2. 如果修改后仍然报错,在两个测试文件的顶部手动添加上述导入语句,强制在测试代码执行前加载jest-dom扩展。
3. 清除jest缓存后再运行测试,避免旧缓存影响配置生效:
npm run test -- --clearCache npm run test
- 如果仍未解决,在package.json中补充jest配置指定前置加载文件:
{ // 原有配置保持不变,新增以下jest字段 "jest": { "setupFilesAfterEnv": ["<rootDir>/src/setupTests.js"] } }
- 终极解决方案:删除项目根目录的
node_modules文件夹和package-lock.json/yarn.lock文件,重新执行npm install安装依赖后再运行测试。
内容的提问来源于stack exchange,提问作者Anwar Hossain
相关产品推荐
相关产品推荐

