I found different posts that tell you how to mock Axios using Jest & Typescript. The only difference in this post is that, when I use Axios, I like to use it as a function rather than calling axios.get
or axios.post
.
Imagine you have this Axios request that you want to mock in your tests:
//src/index.ts
import axios from "axios";
export interface Post {
userId: number;
id: number;
title: string;
body: string;
}
const DummyRequest = (id: number): Promise<Post> => {
return axios({
method: "GET",
url: `https://jsonplaceholder.typicode.com/posts/${id}`,
}).then((response) => {
return { ...response.data };
});
};
export default DummyRequest;
Install jest and jest-ts and initialize jest-ts
>npm i -D ts-jest jest
>npx ts-jest config:init
This last command will create a jest.config.js
file:
//jest.config.js
module.exports = {
preset: "ts-jest",
testEnvironment: "node",
};
In your tsconfig.json file, make sure that your tests are excluded from the compiler:
//tsconfig.json
...
"exclude": [
"test/**/*" <--Add this to your exclude array
],
...
Now we can create a test for our DummyRequest.ts, create this file under test/index.test.ts
:
import axios, { AxiosResponse } from "axios";
import DummyRequest from "../src";
import { mocked } from "ts-jest/dist/util/testing"; //<-- This allows to mock results
jest.mock("axios"); //This is needed to allow jest to modify axios at runtime
it("returns a post", async () => {
//Arrange
const axiosResponse: AxiosResponse = {
data: {
userId: 1,
id: 1,
title:
"sunt aut facere repellat provident occaecati excepturi optioreprehenderit",
body: "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto",
},
status: 200,
statusText: "OK",
config: {},
headers: {},
};
mocked(axios).mockResolvedValue(axiosResponse); //Mocking axios function rather than a method
//Act
const result = await DummyRequest(1);
//Assert
expect(result).toBe({
userId: 1,
id: 1,
title:
"sunt aut facere repellat provident occaecati excepturi optioreprehenderit",
body: "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto",
});
});
Now you can mock the whole Axios function rather than specific methods.