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