У меня есть фиктивная функция, которая подделывает запрос с помощью fetch. Я хочу, чтобы эта фиктивная функция вызывалась с задержкой, чтобы проверить, было ли запущено свойство timeout в тестируемой функции или нет. В настоящее время я откладываю обещание так:
jest.useFakeTimers();
(request as jest.Mock).mockImplementationOnce(() =>
Promise.resolve(response1).then(() => jest.advanceTimersByTime(3000))
);
В тестируемой мной функции конфигурация задается как состояние избыточности, если в конфигурации задано свойство тайм-аута, setTimeOut запускается, если функция запроса (которую мы высмеиваем в тестовом костюме занимает больше времени, чем время ожидания cb из setTimeOut должен сработать, а функция сбоев / ошибок должна сработать). Кусок кода выглядит так:
` return new Promise((resolve: () => void) => {
const timeout = config.timeout || globalConfig.timeout;
let abortTimeout: any;
let aborted = false;
if (timeout) {
abortTimeout = setTimeout(
() => {
const error = new Error('Timeout');
console.log(timeout);
dispatch(apiDataFail(requestKey, error));
onError(error);
aborted = true;
},
timeout`enter code here`
);
}
requestFunction(formatUrl(config.url, params), requestProperties).then(
({ response, body: responseBody }: HandledResponse) => {
if (aborted) {
return;
}
Тест выглядит так:
test('The function resolves with a timeout argument', async (done) => {
state = { apiData: getState('getData', true, {}, 'ready', 'GET', -1, undefined, undefined, 2900) };
const resolves = await (performApiRequest('getData', {}, { data: 'json' })(dispatch, () => store.getState()))
expect(resolves).toBeUndefined()
const error = new Error('Timeout');
const requestKey = getRequestKey('getData');
expect(dispatch).toHaveBeenCalledWith(apiDataFail(requestKey, error));
done();
});
тайм-аут срабатывает правильно, но в тесте появляется ошибка:
Ошибка типа: невозможно прочитать свойство 'response' из неопределенного