Angular 2单元测试:无法读取未定义的属性“root”

时间:2016-11-21 12:44:17

标签: angular unit-testing karma-jasmine

我的模板包含

<a [routerLink]="['/my-profile']" routerLinkActive="active">
    <i class="icon-user"></i>{{ 'MY_PROFILE' | translate }}
</a>

错误是由于routerLinkrouterLinkActive指令。

单元测试文件。

TestBed.configureTestingModule({
    imports: [
        MultilingualModule, CommonModule,
        RouterTestingModule.withRoutes([
            { path: 'my-profile', component: MockComponent },
            { path: 'change-password', component: MockComponent },
        ])
    ],
    schemas: [ NO_ERRORS_SCHEMA ],
    declarations: [TopNavigationBarComponent, TestComponent,MockComponent],
    providers: [
        { provide: LoginService, useValue: MockLoginService },
        { provide: Router, useClass: RouterStub }
    ]
});

3 个答案:

答案 0 :(得分:9)

问题是你实际上是在覆盖路由器进行测试,这使得它破坏了routerLink。 您可以在此处看到有关如何对测试路线进行单元化的详细说明:Angular 2 Final Release Router Unit Test

答案 1 :(得分:1)

您是否尝试将APP_BASE_HREF添加为提供商?

{provide: APP_BASE_HREF, useValue : '/' }

答案 2 :(得分:1)

我遇到了同样的错误,问题是:由于您已经拥有declarations: [...TestComponent...],因此无需添加providers

您的单元测试文件应如下所示:

TestBed.configureTestingModule({
  imports: [
    MultilingualModule, CommonModule,
    RouterTestingModule.withRoutes([
      {
        path: 'my-profile',
        component: MockComponent
      },
      {
        path: 'change-password',
        component: MockComponent
      },
    ])],
  schemas: [ NO_ERRORS_SCHEMA ],
  declarations: [TopNavigationBarComponent, TestComponent, MockComponent],
  providers: [
    { provide: LoginService, useValue: MockLoginService }
  ]
});