我试图测试将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 finalize
,int finalize
还是async
,控制台都会在fakeAsync
之前输出done
。我怀疑将整个设置加载到组件存根中并链接whenStable
调用会起作用,但是似乎应该有更好的方法。有什么建议吗?