代码之家  ›  专栏  ›  技术社区  ›  Mateusz Gebroski

router.navigate测试类型错误:无法读取未定义的属性“root”

  •  0
  • Mateusz Gebroski  · 技术社区  · 7 年前

    我试图为包含 路由器.导航 不幸的是,在内部,我认为我的导入中应该有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']);
    
        }))
    });
    
    0 回复  |  直到 7 年前
    推荐文章