错误:StaticInjectorError(DynamicTestModule)[RouterLinkWithHref->路由器] :( NullInjectorError:没有路由器的提供者!)

aak*_*arg 5 karma-jasmine angular

我正在为AppComponent准备单元测试用例,该组件具有将路由器作为注入的依赖项,并且在我的测试台中包括RouterTestingModule。但是仍然出现一个奇怪的错误。请找到如下所示的错误日志:

Error: StaticInjectorError(DynamicTestModule)[RouterLinkWithHref -> Router]: 
  StaticInjectorError(Platform: core)[RouterLinkWithHref -> Router]: 
    NullInjectorError: No provider for Router!
Run Code Online (Sandbox Code Playgroud)

错误属性:Object({ngTempTokenPath:null,ngTokenPath:['RouterLinkWithHref',Function],ngDebugContext:DebugContext _({view:Object({def:Object({factory:Function,nodeFlags:671753,rootNodeFlags:1,1,nodeMatchedQueries:0 ,标志:0,节点:[Object({nodeIndex:0,父级:null,renderParent:null,bindingIndex:0,outputIndex:0,checkIndex:0,标志:1,childFlags:671753,directChildFlags:1,childMatchedQueries:0 ,matchedQueries:Object({}),matchedQueryIds:0,引用:Object({}),ngContentIndex:null,childCount:10,绑定:[Object({标志:8,ns:“,名称:'className', nonMinifiedName:“ className”,securityContext:0,后缀:undefined}}],bindingFlags:8,输出:[],元素:Object({ns:”,名称:“ nav”,attrs:[Array],模板:空值,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null({}),allProviders:null({}),handleEvent:Function}),provider:null,文本:null,查询:null,ngContent:null} ),对象({...错误:StaticInjectorError(DynamicTestModule)[RouterLinkWithHref->路由器]:StaticInjectorError(平台:核心)[RouterLinkWithHref->路由器]:NullInjectorError:NullInjector.get(webpack://上没有路由器! /./node_modules/@angular/core/fesm5/core.js?:1360:19)位于resolveToken(webpack:///./node_modules/@angular/core/fesm5/core.js?:1598:24)位于tryResolveToken(webpack:///../node_modules/@angular/core/fesm5/core.js?:1542:16)在StaticInjector.get(webpack:///./node_modules/@angular/core/fesm5/core。 js?:1439:20)位于resolveToken(webpack:///)。在staticRejectToken上的tryResolveToken(webpack:///./node_modules/@angular/core/fesm5/core.js?:1542:16)上的/node_modules/@angular/core/fesm5/core.js?:1598:24)。在resolveNgModuleDep(webpack:///./node_modules/@angular/core/fesm5/core.js)上获取(webpack:///./node_modules/@angular/core/fesm5/core.js?:1439:20)? :8667:29)在NgModuleRef_.get(webpack:///./node_modules/@angular/core/fesm5/core.js?:9355:16)在resolveDep(webpack:///./node_modules/@angular/ core / fesm5 / core.js?:9720:45)/node_modules/@angular/core/fesm5/core.js?:9355:16)位于resolveDep(webpack:///./node_modules/@angular/core/fesm5/core.js?:9720:45)/node_modules/@angular/core/fesm5/core.js?:9355:16)位于resolveDep(webpack:///./node_modules/@angular/core/fesm5/core.js?:9720:45)

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

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

wen*_*jun 8

我可以知道你是否进口了RouterTestingModule吗?您应该通过以下方式导入它:

import { RouterTestingModule } from '@angular/router/testing';
Run Code Online (Sandbox Code Playgroud)

另外,routes您的内在是什么RouterTestingModule.withRoutes(routes)?这是如何将RouterTestingModule导入到测试平台的示例。

beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        HttpClientTestingModule
        RouterTestingModule.withRoutes([]),
      ],
      declarations: [
        SomeComponent
      ],
      providers: [           
        SampleService,
      ]

    })
    .compileComponents();
  }));
Run Code Online (Sandbox Code Playgroud)