Я пытаюсь создать простой тест для метода, который содержит router.navigate внутри, к сожалению, я думаю, что в моих импортах должен быть RouterTestingModule.Из-за этого я импортирую RouterTestingModule, и у провайдеров у меня также есть Router, чтобы шпионить за навигацией.При этом я получил эту ошибку, которая может быть из-за переопределения маршрутизаторов.
Метод в компоненте
onUserInfo() {
this.router.navigate(['student/info']);
}
и файл спецификации:
fdescribe('NavbarComponent', () => {
let component: NavbarComponent;
let fixture: ComponentFixture<NavbarComponent>;
let appStore: Store<fromApp.State>
const fakeUser = { username: '', password: '', role: 'PARENT' }
let mockRouter;
beforeEach(async(() => {
mockRouter = {
navigate: jasmine.createSpy('navigate')
}
TestBed.configureTestingModule({
imports: [
RouterTestingModule,
SharedModule,
AuthModule,
MaterialModule,
StoreModule.forRoot(reducers),
EffectsModule.forRoot([AuthEffects, UserEffects])
],
declarations: [
AppComponent,
WelcomeComponent,
NavbarComponent,
ProjectInfoComponent
],
providers: [
{ provide: Router, useValue: mockRouter},
]
}).compileComponents();
appStore = TestBed.get(Store);
}));
beforeEach(() => {
fixture = TestBed.createComponent(NavbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('test', fakeAsync(()=> {
fixture.detectChanges();
component.onUserInfo();
expect(mockRouter.navigate).toHaveBeenCalledWith(['student/info']);
}))
Может кто-нибудь дать мне подсказку по этому вопросу?Когда я удаляю RouterTestingModule, я получаю
'router-outlet' is not a known element:
, когда удаляю {предоставляем: Router, useValue: mockRouter} Я получу
Expected spy navigate to have been called with [ [ 'student/info' ] ] but it was never called.
Есть ли обходной путь?Заранее спасибо.
РЕДАКТИРОВАТЬ (РЕШЕНИЕ)
fdescribe('NavbarComponent', () => {
let component: NavbarComponent;
let fixture: ComponentFixture<NavbarComponent>;
let appStore: Store<fromApp.State>
const fakeUser = { username: '', password: '', role: 'PARENT' }
let router: Router
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule.withRoutes(routes),
SharedModule,
AuthModule,
MaterialModule,
StoreModule.forRoot(reducers),
EffectsModule.forRoot([AuthEffects, UserEffects])
],
declarations: [
AppComponent,
WelcomeComponent,
NavbarComponent,
ProjectInfoComponent
],
providers: [
]
}).compileComponents();
appStore = TestBed.get(Store);
router = TestBed.get(Router)
}));
beforeEach(() => {
fixture = TestBed.createComponent(NavbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('asd', fakeAsync(()=> {
fixture.detectChanges();
let navigateSpy = spyOn(router, 'navigate');
component.onUserInfo();
expect(navigateSpy).toHaveBeenCalledWith(['student/info']);
}))
});