Jest XMLHttpRequest макет запроса показывает ошибку - PullRequest
0 голосов
/ 23 января 2019

У меня есть следующая функция.

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] Но это не называлось.

Может быть, я сделал какую-то глупую ошибку, но не могу понять. Я очень плох в юнит-тестировании.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 13 июня 2019

Глядя на ответ , который вы связали , в примере ответа есть немного:

createXHRmock();

// here you should call GET request

expect(open).toBeCalledWith('GET', 'http://example.com', true);

Между этими двумя утверждениями вам нужно вызвать ваш запрос sendWeatherrequest и изменить ожидаемый результат.(открыть) ожидать URL, который возвращается из вашей функции generateUrl.

например

createXHRmock();

sendWeatherrequest('FR')

expect(open).toBeCalledWith('GET', 'http://theweather.net/france', true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...