I made the following test using MockAdapter from axios-mock-adapter
. However I'm trying to assert that the get function has effectively been called so I created a spy.
For some reason it doesn't seem to work and I get:
expect(jest.fn()).toHaveBeenCalled()
Expected number of calls: >= 1
Received number of calls: 0
Here's my test:
it('gets publications', async() => {
let spy = jest.spyOn(axios, "get");
var mock = new MockAdapter(axios);
mock.onGet(PUBLICATIONS_PATH + '/publications').reply(200,
{
answer: {
publications: [ "pub1", "pub2", "pub3" ]
}
});
let queryParameters = {
operation: 'FSale'
}
const publications = await PublicationService.getPublications(queryParameters);
expect(publications.data.answer.publications).toEqual([ "pub1", "pub2", "pub3" ]); // works fine
expect(spy).toHaveBeenCalled(); //This fails
})
I was actually trying to use the approach answered here.
Update: Here's the code for getPublications
async function _getPublications(queryParameters){
return await axios({
method: 'get',
url: `${PUBLICATIONS_PATH}/publications`,
cancelToken: CancelTokenService.getSource().token,
params: queryParameters,
headers: {
authorization: LocalStorageService.getAuthorization(),
'Accept': ResourcesVersions.PUBLICATION
}
}).then(function (response){ return response }).catch(function (error){ return (axios.isCancel(error) ? error : error.response) })
}
In the test code you provided you are spying on axios get
method, but in the getPublications
method you are not calling that method. Instead, you are calling the axios
method directly.
As spying the axios
default method is not easy, I would suggest to change the code in getPublications
to use the get
method:
async function _getPublications(queryParameters){
return await axios.get(`${PUBLICATIONS_PATH}/publications`, {
cancelToken: CancelTokenService.getSource().token,
params: queryParameters,
headers: {
authorization: LocalStorageService.getAuthorization(),
'Accept': ResourcesVersions.PUBLICATION
}
}).then(function (response){ return response }).catch(function (error){ return (axios.isCancel(error) ? error : error.response) })
}