我正在使用一个函数测试 Angular 4 组件,该函数发出 HTTP 请求(返回一个可观察对象),然后在可观察对象订阅方法中调用另一个函数。我想测试订阅中的函数是否被正确调用。该组件如下所示:
logIn(): void {
this.loginService.logIn(user)
.subscribe(() => {
this.router.navigateByUrl('/')
})
}
我在组件规范中模拟了服务:
loginServiceStub = {
logIn(user: User) {
return Observable.of(true)
},
}
我在路由器和登录服务上附加了一个 spy ,以了解它们是否被调用:
const logInSpy = spyOn(loginService, 'logIn')
const navigateByUrlSpy = spyOn(router, 'navigateByUrl')
当调用组件登录方法时,正在调用 logInSpy 但没有调用 navigateByUrlSpy 并且没有运行订阅方法。我应该如何设置模拟登录才能使其正常工作?
最佳答案
尝试以下操作
stub :
loginServiceStub = {
logIn: jasmine.createSpy('logIn').and.returnValue(Observable.of(true))
}
在测试中:
const navigateByUrlSpy = spyOn(router, 'navigateByUrl').and.callThrough();
关于angular - 监视返回可观察对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45844789/