web-dev-qa-db-ja.com

Angular 2単体テスト:未定義のプロパティ 'root'を読み取れません

私のテンプレートには

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

エラーは、routerLinkおよびrouterLinkActiveディレクティブが原因です。

ユニットテストファイル。

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 }
    ]
});
9

問題は、実際にルーターをオーバーライドしてテストを行い、routerLinkが壊れることです。ルートをユニットテストする方法についての良い説明は次のとおりです。 Angular 2 Final Release Router Unit Test

8
user2555964

私は同じエラーに直面していました、問題は次のとおりです:あなたはすでに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 }
  ]
});
3
Fabio Picheli

APP_BASE_HREFをプロバイダーとして追加しようとしましたか?

{provide: APP_BASE_HREF, useValue : '/' }
1
Anouar