typescript - vitest mock kan inte mocka axios metod isAxiosError
Jag har en funktion som heter myfunction som använder axios för att anropa en API-endpoint. Här är min implementering i myfunction.ts-filen:
export async function myfunction(request:any) {
const url = 'https://sample.to';
try {
const response = await axios.post(url, request), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
});
const { value } = response.data;
return value
}
catch (error: unknown) {
if (axios.isAxiosError(error)) {
if (error.response?.status === 400) {
throw new customError({
type: 'bad request',
status: 400
});
} else if (error.response?.status === 401) {
throw new customError({
type: 'unauthorized',
status: 401
});
}
}
else{
throw new customError({
type: 'unknown error',
status: 500
});
}
}
}
Här är filen myfunction.spec.ts som innehåller testfallen och mock-implementeringen:
import { beforeEach, describe, expect, it,vi } from 'vitest';
import { myfunction } from './myfunction.js';
import axios, { AxiosResponse } from 'axios'
vi.mock("axios", () => {
return {
default: {
post: vi.fn(),
isAxiosError:vi.fn().mockReturnValue(true),
},
};
});
describe('myfunction test cases', () => {
beforeEach(() => {
vi.resetAllMocks();
});
it('should throw a customError when axios.post returns a 400 error', async () => {
const mockResponse: AxiosResponse= {
status:400,
statusText:'Bad Request',
headers:{},
config:{},
data:{customErrorData:{
status: 400,
type: 'bad request',
},
},
}
// Mock the axios.post method to throw an error
const errorResponse = {
response: mockResponse,
isAxiosError: true,
};
const requestMock={id:'xyz',refer:'sample'}
vi.spyOn(axios,'post').mockRejectedValueOnce(errorResponse);
await expect(requestOboToken(requestMock)).rejects.toMatchObject(mockResponse.data);
expect(axios.post).toHaveBeenCalledTimes(1);
});
});
Mitt enhetstest returnerar alltid 500-fel. Det verkar som att det inte kan passa if-villkoret med isAxiosError för att kontrollera axios-fel. Har du något förslag på hur man kan åtgärda detta.