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

Angular单元测试报inject()需在注入上下文调用,preserveSymlinks配置无效如何解决

报错修复方案
  • 补全测试模块缺失的依赖注入
    AppComponent构造函数中注入了CookieService,但你的测试模块providers数组中没有配置该服务的提供规则,是触发本次报错的最直接原因。你可以选择直接mock该服务,避免引入额外依赖:
    把测试文件的providers修改为:
providers: [
  Api,
  LoginService,
  { provide: CookieService, useValue: jasmine.createSpyObj('CookieService', ['get', 'put', 'remove']) }
]
  • 修复tsconfig的路径匹配规则
    你当前tsconfig.app.json中的paths配置缺少通配符,会导致Angular多实例加载,公共包is-common和当前项目会加载两份独立的Angular依赖,从而触发注入上下文错误。另外单元测试读取的是tsconfig.spec.json配置,需要同步修改:
    两个配置文件的compilerOptions.paths都改为:
"paths": { "@angular/*": [ "../node_modules/@angular/*" ] }
  • 同步修改test配置的preserveSymlinks
    你之前只在angular.json的build配置中添加了preserveSymlinks: true,需要在test配置块中也添加相同配置,测试阶段才会生效。
  • 可选优化:mock公共包服务
    如果is-common是你本地开发的公共依赖包,不想处理多实例问题,可以直接mock所有来自公共包的服务,完全避免依赖冲突:
providers: [
  { provide: Api, useValue: jasmine.createSpyObj('Api', []) },
  { provide: LoginService, useValue: jasmine.createSpyObj('LoginService', ['isLogged', 'setApiURL', 'setDefaultClient']) },
  { provide: CookieService, useValue: jasmine.createSpyObj('CookieService', ['get', 'put', 'remove']) }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:15:03