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

标签 angular unit-testing jasmine rxjs

我正在使用一个函数测试 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/

相关文章:

AngularJS $timeout 函数未在我的 Jasmine 规范中执行

javascript - 使用@ViewChild {读取: ElementRef } of component causes unit test to fail

angular - ng-bootstrap DatePicker 在触发器 Angular 4 上设置 startDate 和 minDate

typescript - 如何通过 http 请求使用 Observables 在 native 脚本( typescript )上强制使用 UI "refresh"?

java - 如何捕获 AssertPathsEqual 并将错误打印到控制台?

java - 使用 Mockito Mock 对 Apache Camel Route 进行 JUnit 测试不会失败

c# - 对返回集合的方法进行单元测试

jasmine - 如何在每次测试后运行的 Protractor 中获取全局 afterEach 以截取屏幕截图?

javascript - 在 Jasmine 中使用 $q 的模拟 Angular 工厂

css - Angular-6-datatables 响应式样式