How do I test router.navigate with a subscription? Angular2

I'm new to unit testing in Angular 2, so I'm asking for your help.

My logout function:

logOut() {
    this.authService.logOut().subscribe(() => {
        this.router.navigate(['login']);
    });
}

      

And my unit test:

describe('HomeComponent', () => {
  let component: HomeComponent;
  let fixture: ComponentFixture<HomeComponent>;
  let authenticationService: AuthenticationService;
  let mockLogOut = {
    logOut: () => { }
  };

  beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports: [
            FormsModule,
            HttpModule,
            CommonModule,
            ReactiveFormsModule,
            TranslateModule,
            RouterTestingModule.withRoutes([
                { path: 'login', component: LoginComponent }
            ])
        ],
        declarations: [HomeComponent, LoginComponent],
        providers: [
            { provide: AuthenticationService, useValue: mockLogOut },
            TranslateService,
            TRANSLATION_PROVIDERS
        ],
        schemas: [CUSTOM_ELEMENTS_SCHEMA]
    })
        .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(HomeComponent);
    authenticationService = TestBed.get(AuthenticationService);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });

  describe('Authentication Tests', () => {
    it('should log out the user', inject([AuthenticationService], (mockLogin: AuthenticationService) => {
        fakeAsync(() => {
            spyOn(authenticationService, 'logOut');
            let navigateSpy = spyOn((<any>component).router, 'navigate');
            component.logOut();
            expect(mockLogin.logOut).toHaveBeenCalled();
            expect(navigateSpy).toHaveBeenCalledWith(['/log1n']);
        });
    }));
  });
});

      

I want to check if a user is redirected to a route / login, but this test was always successful even if I put something else than / login

+3


source to share





All Articles