У меня есть следующая функция.
export function sendWeatherrequest(countryName) {
let xmrRequest = new XMLHttpRequest();
xmrRequest.onload = requestListener;
xmrRequest.onerror = requestError;
xmrRequest.open('get', generateUrl(name), true);
xmrRequest.send();
}
function requestListener() {
let data = JSON.parse(this.responseText);
displayPage(data);
}
Я использую jest для юнит-теста.
Как, я где-то читал, что это плохая идея, чтобы проверить оригинальный XMLHttpRequest. Это правда?
Итак, создано следующее из XHR-тестирования в Jest answer
let open, send, status, onload, setRequestHeader, response;
function createXHRmock() {
open = jest.fn();
status = 200;
response = JSON.stringify([{
title: 'some data.',
weather: 'wind'
}]);
send = jest.fn().mockImplementation(function(){
onload = this.onload.bind(this);
onerror = this.onerror.bind(this);
});
const xhrMockClass = function () {
return {
open,
send,
status,
setRequestHeader,
response
};
};
window.XMLHttpRequest = jest.fn().mockImplementation(xhrMockClass);
}
it('XHR success', () => {
createXHRmock();
expect(open).toBeCalledWith('GET', 'http://example.com', true);
expect(send).toBeCalled();
onload();
});
Но я получаю следующую ошибку.
Успех XHR
ожидать (jest.fn ()). ToBeCalledWith (ожидается)
Ожидаемая фиктивная функция была вызвана с:
["GET", "http://example.com", true]
Но это не называлось.
Может быть, я сделал какую-то глупую ошибку, но не могу понять. Я очень плох в юнит-тестировании.
Любая помощь будет принята с благодарностью.