Я пишу модульный тест для тестирования моего сервиса, который вызывает rest API. Ожидается, что ожидаемому () не удается найти мой запрос: Ожидается один соответствующий запрос по критериям "Соответствующий URL: http://localhost:5000/api/v1.0/stat/estimation-graph", не найден.
Я пробовал разные перегрузки ожидаемой операции, такие,as:
httpMock.expectOne(url)
httpMock.expectOne({method: 'GET', url: url})
httpMock.expectOne(res => res.method === 'GET' && res.url === url)
Кроме того, я попытался изменить URL, чтобы он содержал параметры ('http://localhost:5000/api/v1.0/stat/estimation-graph?battleCount=100&winCount=50'), но безуспешно.
Наконец, я открыл консоль Chrome с помощью KarmaРезультаты теста, и я обнаружил, что мой API не может быть вызван из-за политики CORS. Я также исправил это.
Мой файл .spec.ts:
// imports..
describe('StatProviderService', () => {
let injector: Injector;
let httpMock: HttpTestingController;
let statService: StatProviderService;
beforeEach(() =>
{
injector = TestBed.configureTestingModule({
imports: [
HttpClientModule,
HttpClientTestingModule,
],
providers: [
StatProviderService,
],
});
httpMock = injector.get(HttpTestingController);
statService = injector.get(StatProviderService);
});
afterEach(() => {
httpMock.verify();
});
it('should work', () => {
let response;
let url = 'http://localhost:5000/api/v1.0/stat/estimation-graph';
statService.getEstimationGraphData( 100, 50 )
.subscribe(res => {
response = res;
});
const req = httpMock.expectOne(url);
req.flush(response);
});
});
Мой класс обслуживания:
// imports...
@Injectable({
providedIn: 'root'
})
export class StatProviderService {
// private variables
constructor(
private http: HttpClient
) { }
private baseApiUrl(endpoint?: string) {
return `${this.env.apiUrl}/${this.apiVer}/${endpoint}`;
}
getEstimationGraphData(battlecount: number, winCount: number): Observable<IEstimationGraphPoint[]> {
return this.http.get<IEstimationGraphPoint[]>(`${this.baseApiUrl(this.graphDataEndpoint)}/?battleCount=${battlecount}&winCount=${winCount}`);
}
}
Окно результатов Кармы сообщает мне, что не может найти открытый запрос:
Error: Expected one matching request for criteria "Match URL: http://localhost:5000/api/v1.0/stat/estimation-graph", found none.
Но после добавления httpMock.verify () в afterEach () Я получил следующую ошибку:
Error: Expected no open requests, found 1: GET http://localhost:5000/api/v1.0/stat/estimation-graph/
Похоже, запрос вызван, но позже, чем ожидалось. Насколько я подписан на getEstimaGraphData () , он должен вызываться синхронно, верно?