Невозможно прочитать свойство 'navigate' с неопределенной ошибкой при модульном тестировании под углом - PullRequest
0 голосов
/ 06 мая 2018

Почему я вижу эту ошибку при выполнении моего модульного теста для функции, которая должна быть вызвана: вот мой код, сначала код .spec.ts:

it(' doit appeller le serveur quand le boutton ok est cliqué, pour envoyer l option du choix du code', () => {
  let spy = spyOn(authService, 'choixReceptionCode').and.callFake(t => {
  // on est pas besoin de se qui retourner du serveur l essentiel la fonction a ete appelle 
  return Observable.empty();
});

component.choix('mail');
  // comme ça on a testé si la fonction 'connexion' a été appelle ou nn
  expect(spy).toHaveBeenCalled();
});

А вот функция в component.ts:

choix(choice:string)
{
  console.log("ggggggggg"+choice);
  this.router.navigate(['saisirCode']);
  this.choiceReceptionCode.choix=choice;
  this.choiceReceptionCode.user=this.serviceAuthentification.getUserId();
  this.serviceAuthentification.choixReceptionCode(this.choiceReceptionCode).subscribe(
  (data)=>{
      console.log("the response in choixReceptionCode");
      console.log(data);     


  },
  (error)=>{
      console.log("Error in choixReceptionCode ");
      console.log(error);
  });
}

при выполнении теста ng я обнаружил эту ошибку,
картинка, показывающая ошибку

Я знаю, что проблема в этой строке:

this.router.navigate(['saisirCode']);

в файле component.ts, потому что, когда я комментирую это, тестовый проход, так как я могу решить это.

Большое спасибо

1 Ответ

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

Можно попробовать предоставить макет для роутера.

что-то вроде:

let router = jasmine.createSpyObj("Router", ["navigate"]);

и затем:

router.navigate.and.callFake(()=>Observable.of(your stubbed data to return here));

Затем создайте экземпляр вашего компонента, введя макет маршрутизатора

let component = new MyComponent(router);

В этот момент вы можете вызывать this.router.navigate, когда находитесь внутри метода choix, поскольку this.router будет ссылаться на внедренный сервис, который вы уже смоделировали и предоставили.

...