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

Angular13使用Jest测试报Cannot access 'NgbNavLink' before initialization错误

问题原因

这个错误是两个因素共同导致的:

  • 你使用的@ng-bootstrap/ng-bootstrap@11.0.0-rc.0是候选测试版本,存在NgbNavLink相关的循环依赖、模块导出顺序错误的问题
  • 应用启动、构建用的Webpack会自动处理这类循环依赖的初始化顺序,但是Jest的模块加载机制对循环依赖的处理逻辑和Webpack不同,所以只会在测试阶段触发报错
解决方案

按优先级从高到低选择即可:

  1. 升级ng-bootstrap到11.x的正式稳定版
    11.0.0正式版已经修复了这个导出顺序问题,直接升级到@ng-bootstrap/ng-bootstrap@11.0.1及以上的11.x版本即可直接解决,无需修改其他代码或配置。

  2. 按需导入用到的ng-bootstrap模块
    你当前组件只用到了NgbModal,无需导入完整的NgbModule,只导入实际用到的模块即可避开NgbNav相关的错误:
    修改测试文件的导入逻辑:

// 删掉NgbModule导入,改为导入NgbModalModule
import { NgbModalModule } from "@ng-bootstrap/ng-bootstrap";

// TestBed配置同步修改
await TestBed.configureTestingModule({
  declarations: [ MyComponent ],
  imports: [ NgbModalModule ],
})
.compileComponents();
  1. 修改Jest转译配置
    如果暂时不能升级版本、也需要导入完整NgbModule,可修改jest.config.js的transformIgnorePatterns配置,让Jest转译ng-bootstrap的ES模块来兼容处理依赖顺序:
module.exports = {
  // 其他原有配置保留,新增/修改这一行
  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$|@ng-bootstrap)']
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:57:03