Модульный тест Angular2.Проверьте, вызывает ли функция router.navigate - PullRequest
0 голосов
/ 18 мая 2018

Я новичок в тестировании.Есть функция, которая, когда она вызывается, перемещается на новую страницу.Но тест не пройден с ошибкой:

Ожидаемая шпионская навигация была вызвана с [['./../admin/documents/12345']], но никогда не вызывалась.

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

В моем тестовом файле у меня есть:

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]);
   });
 });
});

1 Ответ

0 голосов
/ 19 мая 2018

Вам необходимо инициализировать mockRouter, прежде чем использовать его в TestBed.configureTestingModule.

Кроме того, expect(mockRouter.navigate).toHaveBeenCalledWith(['./../admin/documents/' + id]); не будет работать, поскольку ['a'] !== ['a'].В качестве обходного пути вы можете сделать что-то вроде:

expect(mockRouter.navigate.calls.mostRecent().args[0][0])
  .toEqual('./../admin/documents/' + id);

Я создал Stackblitz для вашего теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...