jest
import axios, { AxiosResponse } from 'axios';
type Url = string;
interface Data {
id: number;
title: string;
}
export async function fetchData(url: Url): Promise<Data> {
try {
const response: AxiosResponse<Data> = await axios.get(url);
return response.data;
} catch (error) {
throw error;
}
}
import { fetchData } from '../../utils/fetchData';
import axios, { AxiosResponse } from 'axios';
const mockedAxios = axios as jest.Mocked<typeof axios>;
interface Data {
id: number;
title: string;
}
describe('fetchData', () => {
it('should fetch data successfully', async () => {
const mockResponse: AxiosResponse<Data> = {
data: {
id: 1,
title: 'Sample Title'
},
status: 200,
statusText: 'OK',
headers: {},
config: {}
};
mockedAxios.get.mockResolvedValue(mockResponse);
const url = 'https://api.example.com/data/1';
const data = await fetchData(url);
expect(mockedAxios.get).toHaveBeenCalledWith(url);
expect(data).toEqual({
id: 1,
title: 'Sample Title'
});
});
it('should throw an error if request fails', async () => {
mockedAxios.get.mockRejectedValue(new Error('Network error'));
const url = 'https://api.example.com/data/1';
try {
await fetchData(url);
} catch (error) {
expect(mockedAxios.get).toHaveBeenCalledWith(url);
expect(error).toEqual(new Error('Network error'));
}
});
});
vitest
import { fetchData } from '../../src/utils/fetchData';
import axios, { AxiosResponse } from 'axios';
const mockedAxios = axios as jest.Mocked<typeof axios>;
interface Data {
id: number;
title: string;
}
describe('fetchData', () => {
it('should fetch data successfully', async () => {
const mockResponse: AxiosResponse<Data> = {
data: {
id: 1,
title: 'Sample Title'
},
status: 200,
statusText: 'OK',
headers: {},
config: {}
};
mockedAxios.get.mockResolvedValue(mockResponse);
const url = 'https://api.example.com/data/1';
const data = await fetchData(url);
expect(mockedAxios.get).toHaveBeenCalledWith(url);
expect(data).toEqual({
id: 1,
title: 'Sample Title'
});
});
it('should throw an error if request fails', async () => {
mockedAxios.get.mockRejectedValue(new Error('Network error'));
const url = 'https://api.example.com/data/1';
try {
await fetchData(url);
} catch (error) {
expect(mockedAxios.get).toHaveBeenCalledWith(url);
expect(error).toEqual(new Error('Network error'));
}
});
});