Когда вы хотите издеваться над внешними модулями с 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)
, но:
Каков идиоматический способ издеваться над функциями при сохранении безопасности типов?