【问题标题】:Spy on a function that returns an observable监视返回可观察对象的函数
【发布时间】:2018-02-01 08:13:52
【问题描述】:

我正在使用一个函数测试 Angular 4 组件,该函数发出一个 HTTP 请求(返回一个 observable),然后在 observables subscribe 方法中调用另一个函数。我想测试订阅中的函数是否被正确调用。该组件如下所示:

logIn(): void {
  this.loginService.logIn(user)
  .subscribe(() => {
    this.router.navigateByUrl('/')
  })
}

我在组件的规范中模拟了服务:

loginServiceStub = {
  logIn(user: User) {
    return Observable.of(true)
  },
}

我已经在路由器和登录服务上附加了一个间谍,以了解它们是否被调用:

const logInSpy = spyOn(loginService, 'logIn')
const navigateByUrlSpy = spyOn(router, 'navigateByUrl')

调用组件登录方法时,logInSpy 被调用,但 navigateByUrlSpy 没有被调用,subscribe 方法没有被运行。我应该如何设置模拟登录以使其正常工作?

【问题讨论】:

    标签: angular unit-testing jasmine rxjs


    【解决方案1】:

    试试下面的

    存根:

    loginServiceStub = {
      logIn: jasmine.createSpy('logIn').and.returnValue(Observable.of(true))
    }
    

    在测试中:

    const navigateByUrlSpy = spyOn(router, 'navigateByUrl').and.callThrough();
    

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 2018-04-11
      • 2020-12-10
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 2019-02-18
      相关资源
      最近更新 更多