You need to enable JavaScript to run this app. Angular10项目Karma+Jasmine单元测试无法加载util模块报错求助
优惠活动
大模型
产品
解决方案
定价
更多

Angular10项目Karma+Jasmine单元测试无法加载util模块报错求助

Angular 10 单元测试Could not load "util" 报错排查与解决

异常触发源定位

从给出的错误栈可以直接锁定问题触发位置:异常是在src/tests/mocks/gog-mock.js第70行的动态脚本加载错误回调中抛出的,和当前配置的Karma、Jasmine版本没有直接关系,不需要优先调整测试栈依赖版本。

分步排查与解决方式

  • 优先检查gog-mock.js第70行的代码逻辑
    触发加载错误的本质是这段代码通过动态创建<script>标签的方式,尝试加载名为util的资源时请求失败,常见原因分两种:
    • 误在mock逻辑中引用了Node.js内置的util模块:浏览器环境本身没有Node内置模块的运行时,Angular 10的测试构建默认走浏览器构建目标,不会自动为这类Node内置模块注入兼容polyfill,必然出现加载失败。这种场景直接删掉mock里对util的引用即可——本来就是编写模拟逻辑,完全不需要依赖Node环境的内置模块,把mock中用到的util相关工具方法用纯浏览器可运行的原生JS实现替代就行。
    • 原mock逻辑需要加载本地名为util.js的静态业务资源:这类问题是因为Karma测试服务没有托管对应路径的静态资源,动态发起的资源请求会返回404,进而触发脚本加载失败的错误事件。解决方式是在angular.json的test配置段中,把对应的util.js资源加入assets托管列表,让Karma启动测试服务时能从正确路径返回该资源。
  • 排查业务侧的Node内置模块引用
    如果清理完mock的问题后还是复现报错,就检查测试覆盖的组件、依赖的第三方库中有没有直接引用Node内置util模块的逻辑。优先方案是把这类引用替换为浏览器原生的实现,确实无法替换的,可以在src/polyfills.ts中手动引入util对应的浏览器端兼容实现,让构建流程能正常识别打包该模块。
  • 补全动态脚本加载的异常兜底
    当前gog-mock.js中的动态脚本加载逻辑没有做异常捕获,一旦加载失败就会抛出未处理的Promise rejection,甚至触发Karma服务的未捕获异常导致整个测试进程中断。可以给动态创建的<script>标签的error回调加上兜底逻辑,加载失败时仅打印警告日志,不要向外抛出未捕获的异常,避免单测进程整体崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 19:45:03