Когда вы хотите издеваться над внешними модулями с Jest, мы можем использовать метод jest.mock() для автоматического jest.mock() функций на модуле.
Затем мы можем манипулировать и опросить насмешливые функции на нашем издеваемом модуле по своему желанию.
Например, рассмотрим следующий надуманный пример для издевательств над модулем axios:
import myModuleThatCallsAxios from '../myModule';
import axios from 'axios';
jest.mock('axios');
it('Calls the GET method as expected', async () => {
const expectedResult: string = 'result';
axios.get.mockReturnValueOnce({ data: expectedResult });
const result = await myModuleThatCallsAxios.makeGetRequest();
expect(axios.get).toHaveBeenCalled();
expect(result).toBe(expectedResult);
});
Вышеупомянутое будет отлично работать в Jest, но будет вызывать ошибку TypScript:
Свойство 'mockReturnValueOnce' не существует в типе '(url: string, config?: AxiosRequestConfig | undefined) => AxiosPromise'.
В typedef для axios.get праву не входит свойство mockReturnValueOnce. Мы можем заставить axios.get обрабатывать axios.get как литерал объекта, обернув его как Object(axios.get), но:
Каков идиоматический способ издеваться над функциями при сохранении безопасности типов?