我正在使用一个函数来测试一个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才能使其正常工作?
答案 0 :(得分:8)
尝试以下
<强>存根:强>
loginServiceStub = {
logIn: jasmine.createSpy('logIn').and.returnValue(Observable.of(true))
}
在测试中:
const navigateByUrlSpy = spyOn(router, 'navigateByUrl').and.callThrough();