У меня есть модуль загрузки, который последовательно загружает массив файлов. Загрузка должна запускаться только после завершения предыдущей загрузки.Как сгенерировать единицу теста сгенерированной цепочки обещаний
Обещание цепь построена для достижения этой цели:
let chain = Promise.resolve();
files.forEach(file => {
chain = chain.then(() => upload(file)); // upload returns a promise
});
chain.then(() => console.log('Files uploaded'));
Я хочу, чтобы убедиться, что эта цепь выполняет upload()
спина к спине. Как я могу проверить его?
По определению и правильной реализации обещаний он будет вызывать первый 'upload()' и не вызывать его еще до первого разрешения. Вот как работают обещания. Таким образом, если вы не пытаетесь проверить обещания, кажется, что вы действительно знаете, что «upload()» не разрешает, пока загрузка не будет завершена. Вы не можете сделать это из черного ящика снаружи. Вам нужно либо иметь некоторые данные с сервера, чтобы проверить, что из одного источника поступает только одна загрузка, либо вам придется написать некоторые тесты самой функции загрузки, чтобы протестировать различные условия и т. Д. – jfriend00
@ jfriend00 Я думаю, что преимущество тестирования этой цепочки заключается в отсутствии обещания. Выполнение выше на самом деле довольно хрупкое. Если вы не завернули функцию 'upload()' в другой функции или не забыли вернуть обещание, все закачки будут выполняться параллельно. Поэтому я считаю, что он все еще стоит усилий для тестирования генерации цепочки. Я думаю, попробую заглушить функцию 'upload()', чтобы убедиться, что она завершена до вызова другого. Благодаря! – PSWai
Дело в том, что проблема полностью связана с реализацией 'upload()'. Не стесняйтесь тестировать все остальное, если хотите, но это реализация 'upload()', которая определяет, работает ли это или нет, и вы должны будете иметь возможность точно видеть, что он делает (на сервере), чтобы проверить, что вы спросили. – jfriend00