无法监视httpInterceptor中可观察到的行为

时间:2018-09-11 09:33:17

标签: angular unit-testing jasmine interceptor spy

我对侦听器变量有间谍,这些侦听器似乎没有按预期工作。我尝试在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调用。因此,我认为我走在正确的道路上,但怀疑这是否是正确的实现。先感谢您。

0 个答案:

没有答案