vendredi 18 mai 2018

Angular2 unit test. Check if a function calls router.navigate

I'm new to testing. Have a function that, when it's called, navigates to a new page. But the test is failing with an error:

Expected spy navigate to have been called with [ [ './../admin/documents/12345' ] ] but it was never called.

public showProfile(id) {
   this.router.navigate(['./../admin/documents/' + id]);
}

In my test file I have:

import {ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';
import { AppComponent} from './app.component';
import {FormsModule} from "@angular/forms";
import {HttpClientTestingModule} from "@angular/common/http/testing";
import {Router} from "@angular/router";


describe('AppComponent', () => {
  let component: AppComponent;
  let fixture: ComponentFixture<AppComponent>;
  let mockRouter;

  beforeEach(() => {
    TestBed.configureTestingModule({
    declarations: [ AppComponent],
    imports: [FormsModule, HttpClientTestingModule],
    providers: [
      { provide: Router, useValue: mockRouter }]
  });

  fixture = TestBed.createComponent(AppComponent);
  component = fixture.componentInstance;
  mockRouter = {
    navigate: jasmine.createSpy('navigate')
  };
 });


 describe('when showProfile() is called', () => {
   it('navigates to a profile page',() => {
     const id= 12345;
     component.showProfile(id);
     expect(mockRouter.navigate)
     .toHaveBeenCalledWith(['./../admin/documents/' + id]);
   });
 });
});

Aucun commentaire:

Enregistrer un commentaire