How do you verify that a request was made with axios-mock-adapter?

As per https://github.com/ctimmerm/axios-mock-adapter there is an out of the box functionality for verifying request calls:

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

Note: This answer is now outdated, see this answer by Laszlo Sarvold instead.


axios-mock-adapter does not appear to have this functionality built in to it, however if you are using jest, you can use jest.spyOn.

For your example above

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

Note: depending on what you are using, you may have to wrap your expect statement in setTimeout(function, 0) for it to work properly


Another alternative is to do

//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')

Essentially since the Mock "intercepts" axios calls you can't test for an axios.get call.. because it never actually happens. But the mock.onGet function does get executed and you can verify what route was used to do it as well.

Trying to spy on axios when you're mocking it will get you an error looking like this

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

Expected: "/users"

Number of calls: 0

Cheers.