Angular单元测试报NG0302找不到currency管道但启动正常如何解决
Angular 12 单元测试currency管道找不到问题修复方案
注意:Angular单元测试的TestBed配置与应用运行时的全局模块配置完全隔离,所有组件运行需要的依赖都需要在测试配置中单独声明,这是npm start正常但npm test报错的核心原因
排查与解决步骤
- 第一步:确认使用
currency管道的组件归属
报错触发在路由跳转测试用例,说明跳转后渲染的页面组件用到了currency管道,该组件在应用运行时因为所在模块已经导入了内置的CommonModule所以可以正常运行,单元测试则未引入对应依赖。 - 第二步:修改测试用例的TestBed配置
打开Router: App > should navigate to /one对应的测试文件,在TestBed.configureTestingModule的imports数组中加入CommonModule,即可直接引入Angular内置的所有公共管道(包括currency、date、async等)。如果你不需要用到
CommonModule下的其他能力,也可以选择只将CurrencyPipe加入到测试配置的providers数组中,缩小依赖范围提升测试运行效率。 - 第三步:特殊场景适配
如果你的路由测试用了懒加载模块配置、或者组件stub替代真实组件:- 懒加载模块场景:将对应懒加载模块也导入到测试配置的
imports数组中 - 组件stub场景:在stub组件的模板中去掉
currency管道的使用,避免触发依赖检查
- 懒加载模块场景:将对应懒加载模块也导入到测试配置的
- 第四步:验证修复
重新执行npm test,确认测试用例可以正常通过。
同类问题扩展
如果后续出现其他自定义管道/指令/组件找不到的测试报错,都可以用同样的逻辑处理:在测试配置中单独导入对应依赖的模块,或者声明对应的管道/指令/组件即可。
内容的提问来源于stack exchange,提问作者Francisco Javier Banos Lemoine
相关产品推荐
相关产品推荐

