Angular 错误:StaticInjectorError(DynamicTestModule)[RouterLinkWithHref->;Router]:(NullInjectorError:没有路由器的提供程序!)

Angular 错误:StaticInjectorError(DynamicTestModule)[RouterLinkWithHref->;Router]:(NullInjectorError:没有路由器的提供程序!),angular,karma-jasmine,Angular,Karma Jasmine,我正在为AppComponent准备单元测试用例,它将路由器作为注入依赖项,并在我的测试床中包含RouterTestingModule。但还是有一个奇怪的错误。请查找下面显示的错误日志: Error: StaticInjectorError(DynamicTestModule)[RouterLinkWithHref -> Router]: StaticInjectorError(Platform: core)[RouterLinkWithHref -> Router]:

我正在为AppComponent准备单元测试用例,它将路由器作为注入依赖项,并在我的测试床中包含RouterTestingModule。但还是有一个奇怪的错误。请查找下面显示的错误日志:

Error: StaticInjectorError(DynamicTestModule)[RouterLinkWithHref -> Router]: 
  StaticInjectorError(Platform: core)[RouterLinkWithHref -> Router]: 
    NullInjectorError: No provider for Router!
错误属性:对象({NGTENTOKENPATH:null,ngTokenPath:[ 'RouterLinkWithHref',函数],ngDebugContext:DebugContext_({ 视图:对象({def:Object({factory:Function,nodeFlags:671753, rootNodeFlags:1,nodeMatchedQueries:0,标志:0,节点:[对象({ nodeIndex:0,父级:null,renderParent:null,bindingIndex:0, 输出索引:0,检查索引:0,标志:1,子标志:671753, directChildFlags:1,childMatchedQueries:0,matchedQueries:对象({ }),MatchedQueryId:0,引用:对象({}),ngContentIndex: null,childCount:10,绑定:[对象({flags:8,ns:'',名称: “className”,非最小名称:“className”,securityContext:0,后缀: 未定义}],bindingFlags:8,输出:[],元素:对象({ns: '',名称:'nav',属性:[Array],模板:null,组件提供程序: null,componentView:null,ComponentRenderType:null, publicProviders:null({}),allProviders:null({}),handleEvent: 函数}),提供程序:null,文本:null,查询:null,内容:null }),对象({…错误: StaticInjectorError(DynamicTestModule)[RouterLinkWithHref->Router]: StaticInjectorError(平台:核心)[RouterLinkWithHref->Router]: NullInjectorError:没有路由器的提供程序! 至少(webpack:///./node_modules/@角度/core/fesm5/core.js?:1360:19) 至少(webpack:///./node_modules/@角度/core/fesm5/core.js?:1598:24) 在tryResolveToken(webpack:///./node_modules/@角度/core/fesm5/core.js?:1542:16) 至少(webpack:///./node_modules/@角度/core/fesm5/core.js?:1439:20) 至少(webpack:///./node_modules/@角度/core/fesm5/core.js?:1598:24) 在tryResolveToken(webpack:///./node_modules/@角度/core/fesm5/core.js?:1542:16) 至少(webpack:///./node_modules/@角度/core/fesm5/core.js?:1439:20) 在ResolvingModuleDep(webpack:///./node_modules/@角度/core/fesm5/core.js?:8667:29) 在NgModuleRef_2;,获取(webpack:///./node_modules/@角度/core/fesm5/core.js?:9355:16) 至少(webpack:///./node_modules/@角度/core/fesm5/core.js?:9720:45)

请帮助。我已尝试从模板中删除路由器链接

TestBed.configureTestingModule({
    declarations: [
      AppComponent
    ],
    imports: [
      CoreModule.forRoot(),
      RouterTestingModule.withRoutes(routes),
    ],
    providers: [
      {provide: APP_BASE_HREF, useValue: '/'},
    ]
}

我可以知道您是否导入了
RouterTestingModule
?您应该这样导入它:

从“@angular/router/testing”导入{RouterTestingModule};

另外,您的
RouterTestingModule中的
routes
是什么。withRoutes(routes)
?下面是如何将RouterTestingModule导入测试床的示例

beforeach(异步(()=>{
TestBed.configureTestingModule({
进口:[
HttpClientTestingModule,
RouterTestingModule.withRoutes([]),
],
声明:[
某些组件,
],
供应商:[
样本服务,
],
})
.compileComponents()
}))

我能够解决这个问题。在修改测试用例时,我更新了@types/jasmine版本以解决一些问题,并更新了一些其他依赖项。在后台,我的应用程序也因此而崩溃。因此,我重新划分了存储库,然后只更新了所需的依赖项。现在代码工作正常。

以防万一,尝试创建类似
TestBed.overrideComponent(AppComponent,{set:{template:''}})的组件。createComponent(AppComponent);
并检查错误是否仍然存在。您尝试过了吗?让我试试看是否有效。此解决方案不起作用,请添加CoreModule的列表,好吗?为了解决此问题,我们应该更新哪个文件issue@MohanGopi它应该在需要使用模拟路由的测试/规范文件中谢谢,
RouterTestingModule.withRoutes([])
为我解决了这个问题。