В Jest docs написано:
Неразрешенные обещания
Если обещание не разрешается вообще, эта ошибка может быть выдана:
(и так далее)
В моем случае этого не произойдет.У меня есть этот тест:
test('detect infinite loop', () => {
expect.assertions(1);
const vastPromise = VastUtils.parseFromUrl(infiniteLoopUrl);
const expectedError =
new VastError(VastErrorCodes.WRAPPER_LIMIT_REACHED);
return expect(vastPromise).rejects.toEqual(expectedError);
});
VastUtils
просто получить XML, расположенный по адресу infiniteLoopUrl
, проанализировать его, и если этот xml указывает на другой xml, VastUtils
перейти по ссылке, проанализировать новый xml, объедините их и повторите процесс.Теперь infiniteLoopUrl
указывает на XML, который ссылается на себя, так что это бесконечный цикл.«правильно», код следует по xml-ссылке бесконечно и никогда не разрешает и не отклоняет обещание.
Я ожидаю, что вышеописанный тест не пройден после определенного времени ожидания, но это не так.
Кто-то может помочьмне?Спасибо
РЕДАКТИРОВАТЬ: я пытаюсь воспроизвести бесконечный цикл Promise с меньшим примером, и это то, что я заметил:
этот тест правильно провалился через 5 с:
test('Promise2', () => {
const genPromise = (): Promise<void> => {
return new Promise((res) => {
setTimeout(() => {
res();
}, 200);
})
.then(() => {
return genPromise();
});
};
const vastPromise = genPromise();
const expectedError =
new VastError(VastErrorCodes.WRAPPER_LIMIT_REACHED);
return expect(vastPromise).rejects.toEqual(expectedError);
});
Этот тест НЕ ОТКАЗЫВАЕТСЯ через 5 с (шутка остается в бесконечном цикле)
test('Promise', () => {
const genPromise = (prom: Promise<void>): Promise<void> => {
return prom
.then(() => {
return genPromise(Promise.resolve());
});
};
const vastPromise = genPromise(Promise.resolve());
const expectedError =
new VastError(VastErrorCodes.WRAPPER_LIMIT_REACHED);
return expect(vastPromise).rejects.toEqual(expectedError);
});
Очевидно, что они похожи, но я не понимаю разницу, которая вызывает шутку бесконечнойпетля ...