0

为什么在对需要调用的函数进行单元测试时看到此错误:这是我的代码,首先是 .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 test 时发现此错误,
显示错误的图片

我知道问题出在这一行:

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

在 component.ts 文件中,因为当我评论它测试通过时,我该如何解决它。

非常感谢

4

1 回答 1

0

您可以尝试为路由器提供模拟。

就像是:

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在方法内部调用 when ,choix因为this.router将引用您已经模拟和提供的注入服务。

于 2018-05-06T03:38:53.627 回答