ошибка: ожидался один запрос на совпадение по критерию «Совпадение по функции:», не найден.
Я искал много вещей и пробовал несколько решений. Но никто из них не работал. Это мой первый проект для модульного тестирования. Вот мой код.
Auth Interceptor
export class JwtInterceptor implements HttpInterceptor {
constructor(@Inject(API_URL) private apiUrl: string) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({url: this.prepareUrl(request.url)});
let authToken = localStorage.getItem('auth_token');
if (authToken) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${authToken}`
}
});
}
else {
// use proxy url for cors error
request = request.clone({url: this.prepareUrl('https://cors-anywhere.herokuapp.com/' + request.url)});
// Encode the String
let encodedString = btoa(`${environment.clientId}:${environment.clientSecret}`);
request = request.clone({
setHeaders: {
Authorization: `Basic ${encodedString}`
}
});
}
return next.handle(request);
}
private isAbsoluteUrl(url: string): boolean {
const absolutePattern = /^https?:\/\//i;
return absolutePattern.test(url);
}
private prepareUrl(url: string): string {
url = this.isAbsoluteUrl(url) ? url : this.apiUrl + '/' + url;
return url.replace(/([^:]\/)\/+/g, '$1');
}
}
Спецификация Auth Interceptor
describe('Jwt Interceptor', ()=> {
let httpTestingController: HttpTestingController;
let http: HttpClient;
beforeEach(()=> {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: JwtInterceptor,
multi: true
}]
});
httpTestingController = TestBed.get(HttpTestingController);
http = TestBed.get(HttpClient);
});
it('should add Authorization header in each request', ()=> {
http.get('/data').subscribe(response => {
expect(response).toBeTruthy();
});
const req = httpTestingController.expectOne(
req => req.headers.has('Authorization')
);
// expect(req.request.headers.has('Authorization')).toEqual(true);
expect(req.request.method).toEqual('GET');
// req.flush({hello: 'world'});
httpTestingController.verify();
});
afterEach(()=> {
httpTestingController.verify();
});
});
Я также пытался установить заголовки авторизации с помощью сервиса mock. Может ли кто-нибудь помочь мне, что мне здесь не хватает?