web-dev-qa-db-de.com

Angular 2 Unit-Test: Eigenschaft 'root' von undefined kann nicht gelesen werden

Meine Vorlage enthält

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

der Fehler liegt an den Anweisungen routerLink und routerLinkActive.

Unit-Testdatei.

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

Das Problem ist, dass Sie den Router tatsächlich überschreiben, um Ihren Test durchzuführen, wodurch der RouterLink unterbrochen wird. Sie können hier eine gute Erklärung dazu finden, wie Sie Testrouten zusammenstellen: Angular 2 Final Release Router Unit-Test

9
user2555964

Haben Sie versucht, APP_BASE_HREF als Anbieter hinzuzufügen?

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

Ich war mit dem gleichen Fehler konfrontiert, das Problem ist: Da Sie bereits declarations: [...TestComponent...] haben, ist es nicht notwendig, providers hinzuzufügen.

Ihre Gerätetestdatei sollte folgendermaßen aussehen:

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 }
  ]
});
1
Fabio Picheli