Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查订阅功能是否在工作?_Javascript_Angular - Fatal编程技术网

Javascript 如何检查订阅功能是否在工作?

Javascript 如何检查订阅功能是否在工作?,javascript,angular,Javascript,Angular,我想使用jasmine对组件中的函数进行单元测试。 在该函数内部存在subscribe函数。我想测试该函数id user get response,它应该导航到/user组件 功能 onSubmit(val) { console.log(val); this.signupService.signUpHandler(val).subscribe((res:SignUpModel) => { if (res.token !== '') { this

我想使用jasmine对组件中的函数进行单元测试。 在该函数内部存在
subscribe
函数。我想测试该函数id user get response,它应该导航到
/user
组件

功能

 onSubmit(val) {
    console.log(val);
    this.signupService.signUpHandler(val).subscribe((res:SignUpModel) => {
      if (res.token !== '') {
        this.router.navigate(['/users']);
      }
    }, (err) => {
      console.log(err);
    });
  }
这是我的密码

我可以检查我的
服务
功能是否在单击按钮时被调用

 it('should called service method on button click', inject([SignupserviceService], (signupserviceService: SignupserviceService) => {
      spyOn(signupserviceService, 'signUpHandler');
      let button = fixture.nativeElement.querySelector('.btn')
      button.click();
      expect(signupserviceService.signUpHandler).toHaveBeenCalled();
    }));

现在,我想检查我是否从服务获得响应,然后我将重定向到
\user
组件。

您只需监视您正在订阅的函数并返回预期的响应,假设成功:

it('should call the router's navigate method if a non-empty string token property is on the response', inject([SignupserviceService, Router], (signupserviceService: SignupserviceService, router: Router) => {
      spyOn(signupserviceService, 'signUpHandler').and.returnValue(Observable.of({token: 'not empty'}));
      spyOn(router, 'navigate');
      let button = fixture.nativeElement.querySelector('.btn');

      button.click();
      expect(router.navigate).toHaveBeenCalledWith(['/users']);
    })
);

将此视为伪代码,因为我没有检查它是否有错误,但你明白了。

可能只是
spyOn().和.callFake(()=>Observable.of('xxx'))
以确保它是一个可观察的,你可以订阅吗?你能给出一些类似的代码吗?我认为最好尝试创建一个完整的演示,如果可能的话,使答案被充分理解。为了让更多可能有同样问题的人受益。这是一个公平的观点……今晚我将尝试更新答案,使其更加完整。