我试图为包含
路由器.导航
不幸的是,在内部,我认为我的导入中应该有RouterTestingModule。正因为如此,我正在导入RouterTestingModule,在providers中,我也有路由器来监视导航。我得到这个错误,可能是因为覆盖路由器。
分量法
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:
当我删除{provide: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']);
}))
});