Как смоделировать запрос axios с помощью модулей sinon - PullRequest
0 голосов
/ 04 июля 2019

Кажется, есть много разных способов сделать это, но я пытаюсь использовать только модули sinon, sinon-test, chai / mocha, axios, httpmock. Я не могу успешно смоделировать вызов GET, сделанный с помощью axios. Я хочу, чтобы можно было смоделировать ответ от этого вызова axios, чтобы модульному тесту фактически не приходилось делать запрос внешнего API.

Я попытался настроить базовый модульный тест, создав песочницу и используя заглушку sinon, чтобы установить вызов GET и указать ожидаемый ответ. Я незнаком с JavaScript и NodeJS.

// Main class (filename: info.js)

function GetInfo(req, res) {
    axios.get(<url>).then(z => res.send(z.data));
}

// Test class (filename: info.test.js)

it ("should return info", () => {
    const expectedResponse = "hello!";
    const res = sinon.spy();
    const aStub = sinon.stub(axios, "get").resolves(Promise.resolve(expectedResponse));

    const req = httpMock.createRequest({method:"get", url:"/GetInfo"});

    info.GetInfo(req, res);

    // At this point, I need to evaluate the response received (which should be expectedResponse)
    assert(res.data, expectedResponse); // data is undefined, res.status is also undefined

    // How do I read the response received?

});

Мне нужно знать, как прочитать ответ, который должен быть отправлен обратно (если он захватывается в первую очередь sinon).

1 Ответ

0 голосов
/ 04 июля 2019

Я предполагаю, что ответ, который вы хотите проверить, - это z.data, передаваемый res.send(z.data)

Я не думаю, что ваш Sinon Spy настроен правильно.

В вашем примере res - это функция, созданная sinon.Эта функция не будет иметь свойства data.

Возможно, вы захотите создать шпиона следующим образом:

const res = {
  send: sinon.spy()
}

Это даст вам объект res, у которого есть шпион сключ send.Затем вы можете сделать утверждения о параметрах, используемых для вызова res.send

it ("should return info", () => {
    const expectedResponse = "hello!";
    const res = {
      send: sinon.spy()
    };
    const aStub = sinon.stub(axios, "get").resolves(Promise.resolve(expectedResponse));

    const req = httpMock.createRequest({method:"get", url:"/GetInfo"});

    info.GetInfo(req, res);

    // At this point, I need to evaluate the response received (which should be expectedResponse)
    assert(res.send.calledWith(expectedResponse)); // data is undefined, res.status is also undefined

});
...