Как проверить, что запрос был сделан с помощью axios-mock-adapter?

Я использую https://github.com/ctimmerm/axios-mock-adapter

Я хотел бы знать, как я могу проверить, что конечная точка была фактически вызвана тестируемой системой.

В этом примере:

var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');

// This sets the mock adapter on the default instance
var mock = new MockAdapter(axios);

// Mock any GET request to /users
// arguments for reply are (status, data, headers)
mock.onGet('/users').reply(200, {
  users: [
    { id: 1, name: 'John Smith' }
  ]
});

Как я могу узнать, был ли вызван файл '/users'?

Я ищу что-то похожее на то, что вы можете сделать в Jest:

expect(mockFunc).toHaveBeenCalledTimes(1)

Я понимаю, что могу использовать некоторую пользовательскую логику при использовании функции ответа и установки локальной переменной, указывающей, был ли сделан запрос. Мне просто интересно, есть ли более чистый способ сделать это.

3 ответа

Решение

Похоже, что axios-mock-adapter не имеет этой встроенной функции, однако, если вы используете jest, вы можете использовать jest.spyOn.

Для вашего примера выше

let spy = jest.spyOn(axios, "get");
//run http request here
expect(spy).toHaveBeenCalled();

Примечание: в зависимости от того, что вы используете, вам может понадобиться обернуть ваш оператор ожидания в setTimeout(function, 0), чтобы он работал правильно

Согласно https://github.com/ctimmerm/axios-mock-adapter, есть готовая функция для проверки вызовов запросов:

      expect(mock.history.post.length).toBe(1); // times called
expect(mock.history.post[0].data).toBe(JSON.stringify({ foo: "bar" })); // posted object

Другая альтернатива - сделать

//OP's Code
var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');

// This sets the mock adapter on the default instance
var mock = new MockAdapter(axios);

// Mock any GET request to /users
// arguments for reply are (status, data, headers)
mock.onGet('/users').reply(200, {
  users: [
    { id: 1, name: 'John Smith' }
  ]
});

const spy = jest.spyOn(mock, 'onGet');

//function call here

expect(spy).toHaveBeenCalledWith('/users')

По сути, поскольку Mock "перехватывает" вызовы axios, вы не можете проверить вызов axios.get... потому что на самом деле этого никогда не происходит. Но функция mock.onGet запускается, и вы также можете проверить, какой маршрут использовался для этого.

Попытка шпионить за аксиомами, когда вы издеваетесь над ним, приведет к ошибке следующего вида

expect(jest.fn()).toHaveBeenCalledWith(...expected)

Expected: "/users"

Number of calls: 0

Ура.

Другие вопросы по тегам