角度:测试在可观察性完成之前完成

时间:2019-07-23 18:33:03

标签: angular jasmine karma-runner angular-testing

我试图测试将interceptor运算符添加到管道中的finalize,但是我无法保持测试运行足够长的时间以使返回的可观察到的函数确定下来。 / p>

这是从observable函数返回的intercept

return next.handle(request).pipe(
    finalize(() => {
      console.log('int finalize');
      this.activeRequests--;
      if (this.activeRequests === 0 ) {
        this.loader.endLoading();
      }
    }));

我正在尝试测试返回对象是否调用endLoading

beforeEach(() => spyOn(svc, 'endLoading').and.callThrough());

fit('calls endLoading', async(() => {
  const expected = [];
  client.get('/someUrl')
    .pipe(
      finalize(() => {
        console.log('spec finalize');
        expect(svc.endLoading).toHaveBeenCalledTimes(1);
      })
    ).subscribe(response => expect(response).toEqual(expected));

  http.expectOne('/someUrl').flush(expected);
  expect(svc.endLoading).toHaveBeenCalledTimes(1);
}));

执行测试时,无论我使用spec finalizeint finalize还是async,控制台都会在fakeAsync之前输出done。我怀疑将整个设置加载到组件存根中并链接whenStable调用会起作用,但是似乎应该有更好的方法。有什么建议吗?

0 个答案:

没有答案