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

Daryn picture Daryn · Dec 8, 2017 · Viewed 9.6k times · Source

I am using https://github.com/ctimmerm/axios-mock-adapter

I would like to know how can I verify that an endpoint was actually called by the system under test.

In this example:

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' }
  ]
});

How could I tell if a get on '/users' was called?

I am looking for something similar to what you can do in Jest:

expect(mockFunc).toHaveBeenCalledTimes(1)

I realise I can use some custom logic when using a function to reply, and setting a local variable indicating if the request has been made. I was just wondering if there was a cleaner way of doing this.

Answer

Perogy picture Perogy · Apr 10, 2018

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