Angular13使用Jest测试报Cannot access 'NgbNavLink' before initialization错误
问题原因
这个错误是两个因素共同导致的:
- 你使用的
@ng-bootstrap/ng-bootstrap@11.0.0-rc.0是候选测试版本,存在NgbNavLink相关的循环依赖、模块导出顺序错误的问题 - 应用启动、构建用的Webpack会自动处理这类循环依赖的初始化顺序,但是Jest的模块加载机制对循环依赖的处理逻辑和Webpack不同,所以只会在测试阶段触发报错
解决方案
按优先级从高到低选择即可:
升级ng-bootstrap到11.x的正式稳定版
11.0.0正式版已经修复了这个导出顺序问题,直接升级到@ng-bootstrap/ng-bootstrap@11.0.1及以上的11.x版本即可直接解决,无需修改其他代码或配置。按需导入用到的ng-bootstrap模块
你当前组件只用到了NgbModal,无需导入完整的NgbModule,只导入实际用到的模块即可避开NgbNav相关的错误:
修改测试文件的导入逻辑:
// 删掉NgbModule导入,改为导入NgbModalModule import { NgbModalModule } from "@ng-bootstrap/ng-bootstrap"; // TestBed配置同步修改 await TestBed.configureTestingModule({ declarations: [ MyComponent ], imports: [ NgbModalModule ], }) .compileComponents();
- 修改Jest转译配置
如果暂时不能升级版本、也需要导入完整NgbModule,可修改jest.config.js的transformIgnorePatterns配置,让Jest转译ng-bootstrap的ES模块来兼容处理依赖顺序:
module.exports = { // 其他原有配置保留,新增/修改这一行 transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$|@ng-bootstrap)'] }
内容的提问来源于stack exchange,提问作者Gaetitan
相关产品推荐
相关产品推荐

