我对侦听器变量有间谍,这些侦听器似乎没有按预期工作。我尝试在chrome devTool上使用断点,并且发现inj.hasNext$
已更新,据我所知,将其值设置为true
;
inj.hasNext$.next(true);
let value = inj.hasNext$.getValue(); // true
但是当我尝试从http请求中观察到inj.hasNext时,它仍然是错误的。
app.component.spec.ts
beforeEach(() => {
TestBed.ConfigureTestingModule({
.
.
.
provider: [
CustomInterceptor,
{
provide: HTTP_INTERCEPTORS,
useClass: CustomInterceptor,
multi: true,
}
]
});
it('test', inject([CustomInjector], (inj: CustomInjector)=> {
let spy = spyOn(inj, 'hasNext$').and.callThrough();
component.run().subscribe(data => {
expect(data).ToBeDefined();
expect(inj.hasNext$).toHaveBeenCalled(); // has never called
expect(inj.hasNext$).toHaveBeenCalledTimes(1); // 0 time called
expect(inj.hasNext$.getValue()).ToBeTruthy(); // false, while in the interceptor it has changed to a different value
});
await fixture.whenStable();
fixture.detectChanges();
});
});
有人遇到过类似情况吗?我可以两次提供CustomInterceptor吗,所以我的项目中存在两个CustomInterceptor实例?还是我做错了?
对于我的一个问题,我已经尝试了以下代码。
spyOn(inj, 'getNewName').and.returnValue(Observable.of('James Smiths').toPromise());
我设法获取新名称并将其设置在标题上,并成功进行了http调用。因此,我认为我走在正确的道路上,但怀疑这是否是正确的实现。先感谢您。