javascript - 如何检查订阅功能是否在 Angular 中工作?

标签 javascript angular

我想使用 jasmine 对组件中存在的函数进行单元测试。 在该函数内部存在 subscribe 函数。我想测试该函数 id 用户获得响应,而不是导航到 /user 组件。

功能

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

这是我的代码 https://stackblitz.com/edit/angular-testing-kdb8ka?file=app%2Fapp.component.ts

我可以检查我的服务函数在单击按钮时被调用

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

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

关于javascript - 如何检查订阅功能是否在 Angular 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50709944/

相关文章:

angular - NullInjectorError : No provider for HighContrastModeDetector

Angular CLI 版本与 Angular 版本不兼容

javascript - 如何忽略嵌套 <a> 的 jQuery Accordion 点击事件

javascript - 了解此控制台错误 - 'top' 未定义

javascript - 将单选按钮绑定(bind)到对象数组

javascript - 这个 facebook 代码是什么?

javascript - 为什么自定义事件不需要与 xxx.target.value 一起使用”

Angular 4 与 Angular 火 2

javascript - 脚本5007 : Unable to get property 'value' of undefined or null reference in IE10

node.js - 为什么当我运行 Angular/React 项目时它无法在我的本地主机上运行?