Я пишу модульный тест для моего перехватчика HTTP, и я застрял, пытаясь получить пользователя (с токеном доступа) из localStorage. Проблема в том, что getItem('currentUser')
всегда равно нулю, поэтому я хочу изменить его внутри теста. Вот часть моего перехватчика, которая имеет значение для этого примера:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.currentUser = this.lsService.getItem('currentUser') as any;
if(this.currentUser && this.currentUser.accessToken && this.checkIfUrlNeedsToken(request)) {
request = request.clone({ headers: request.headers.set('Authorization', this.currentUser.accessToken) });
}
И это мой тест:
describe(`HttpInterceptorService`, () => {
let service: HttpInterceptorService;
let httpMock: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
RouterTestingModule,
MatDialogModule
],
providers: [
HttpInterceptorService,
{
provide: HTTP_INTERCEPTORS,
useClass: HttpInterceptorService,
multi: true,
},
],
});
service = TestBed.get(HttpInterceptorService);
httpMock = TestBed.get(HttpTestingController);
});
afterEach(inject([HttpTestingController], (httpMock: HttpTestingController) => {
httpMock.verify();
}));
it('adds Authorization header', inject([HttpClient, HttpTestingController],
(http: HttpClient, httpMock: HttpTestingController) => {
http.get('/dummy').subscribe();
const httpRequest = httpMock.expectOne('/dummy');
expect(httpRequest.request.headers.has('Authorization')).toEqual(true);
}));
});
Потому что this.currentUser
всегда ложно в 'если 'условие от перехватчика, запрос никогда не получает установленный заголовок авторизации. Поэтому я пытаюсь изменить currentUser внутри моего теста, но я не знаю точно, как это сделать. Я пробовал с этим:
let interceptorhServiceStub = {
currentUser: {
accessToken: 'mockAccessToken'
}
};
и
providers: [
{ provide: HttpInterceptorService, useValue: interceptorhServiceStub },
, но это не работает, потому что я фактически никогда не использую HttpInterceptorService
в своем тесте. Посоветуйте пожалуйста что я делаю не так. Спасибо!