监听一个返回可观察对象的函数

6

我正在测试一个Angular 4组件,它带有一个函数,该函数会进行HTTP请求(返回一个observable),然后在observable的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没有被调用,并且订阅方法也未运行。我应该如何设置模拟登录以使其正常工作?
1个回答

14

请尝试以下方法

存根:

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

在测试中:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接