Не может шпионить за поведением, наблюдаемым в httpInterceptor - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть шпионы на переменных-перехватчиках, которые, похоже, не работают так, как они предназначены. Я пытался использовать точки останова на chrome devTool, и я обнаружил, что inj.hasNext$ обновился, насколько я могу видеть, установив для него значение true;

inj.hasNext$.next(true); 
let value = inj.hasNext$.getValue(); // true

но когда я пытаюсь прочитать его inj.hasNext в наблюдаемом запросе http, он все еще ложен.

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-вызов. Из-за этого я думаю, что я на правильном пути, но сомневаюсь, что это правильная реализация. Заранее спасибо.

...