导入Jest致应用崩溃的原因排查与正确导入方式(含Mocked)
问题分析与解决方案
崩溃原因
你在浏览器运行的应用业务代码中直接导入了ts-jest或@jest/globals这类jest相关包,这些工具依赖Node.js环境的process全局变量,但浏览器环境不存在这个变量,所以运行时抛出ReferenceError,导致应用崩溃。而且jest本质是测试工具,仅用于测试环境,不该被打包进浏览器运行的代码里。
正确的jest导入方式
- 仅在测试文件(命名通常为
xxx.test.ts或xxx.spec.ts)中使用jest相关工具 - 测试文件内,推荐从
@jest/globals导入jest、mocked,或者直接使用jest自动挂载的全局jest对象 - 配合ts-jest时,确保
tsconfig.json的compilerOptions.types数组包含jest,让TypeScript识别jest的全局类型:{ "compilerOptions": { "types": ["jest"] } }
实现mocked对象正常使用且不崩溃的方案
- 隔离测试代码:把所有jest相关的导入、
mocked调用等逻辑,全部移到测试文件中,绝对不要放到应用业务代码里 - 应用级模拟替代jest mock:如果需要在开发/生产环境模拟模块(比如API请求),不要用jest的
mocked,改用适合浏览器环境的方案:- 用Mock Service Worker(MSW)模拟后端接口
- 自己编写模拟函数或类,替代第三方依赖
- 检查打包配置:确保打包工具(webpack/Vite等)不会把测试相关代码打包进产物。比如Vite默认会排除
node_modules中的测试工具,但如果你的业务代码直接引用了jest包,还是会被打包,所以隔离测试代码是核心。
内容的提问来源于stack exchange,提问作者altern
相关产品推荐
相关产品推荐

