I recently had to mock axios while writing tests for a huge frontend project at work. I'm writing this tutorial because I know that sometime in the future I will be googling this again and I might as well save future me the stress and document what I found right now.
First off, install jest-mock-axios with npm install -D jest-mock-axios
or yarn add -D jest-mock-axios
.
Next up, create a new folder __mocks__
in your Jest root directory. Your Jest root directory is defined in your project's package.json.
"jest": {
"roots": [
"spec/client"
],
}
Next, create a new file and name it axios.js
. Make sure to place it in your newly created __mocks__
folder.
Place the code below in axios.js
// __mocks__/axios.js
import mockAxios from "jest-mock-axios";
export default mockAxios;
At this point, set-up is complete. Below is an example usage of the mocked version of axios you just finished setting up using this tutorial.
// Uploader.vue
import Uploader from "Uploader";
import mockAxios from "jest-mock-axios";
import { shallowMount } from "@vue-test-utils";
describe("Uploader.vue", () => {
test("it should delete uploaded file", () => {
const wrapper = shallowMount(Uploader);
wrapper.setData({ uploads: [{ name: "Upload 1", public_id: "test_id" }] });
wrapper.find(".uploads>li:first-child").trigger("click");
mockAxios.mockResponse({ status: 200 });
expect(wrapper.emitted("filedeleted").length).toEqual(1);
});
});
For more information on the possibilities of jest-mock-axios, visit this link.