监视返回可观察对象的函数

时间:2017-08-23 16:16:41

标签: angular unit-testing jasmine rxjs

我正在使用一个函数来测试一个Angular 4组件,该函数发出一个HTTP请求(返回一个observable),然后在observables subscribe方法中调用另一个函数。我想测试正确调用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方法。我应该如何设置模拟logIn才能使其正常工作?

1 个答案:

答案 0 :(得分:8)

尝试以下

<强>存根:

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

在测试中:

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