Вы можете использовать Promise.race()
для реализации тайм-аута.Я не знаю ваш тестовый код, поэтому я покажу только внутреннюю часть, которая дает вам тайм-аут по запросу кошмара, и вы можете вставить его в свою тестовую среду.
// utility function that returns a rejected promise after a timeout time
function timeout(t, msg) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject(new Error(msg));
}, t);
});
}
Promise.race([
nightmare
.goto(www.example.com / log - in )
.wait(5000)
.type(".input[type='email']", "username")
.type(".input[type='password']", "password")
.click(".submit")
.wait(3000)
.url()
.exists(".navbar")
.end()
, timeout(5000, "nightmare timeout")
]).then(result => {
// process successful result here
}).catch(err => {
// process error here (could be either nightmare error or timeout error)
});
Суть в том, чтовы создаете гонку между обещанием из вашего кошмарного запроса и обещанием из таймаута.В зависимости от того, что разрешено или отклонено, выигрывает первый и заканчивает обработку обещания.Если обработчик Promise.race(...).then()
срабатывает, то это потому, что ваш кошмарный запрос закончился до истечения времени ожидания.Если обработчик Promise.race(...).catch()
срабатывает, то это потому, что либо запрос кошмара не выполнен, либо вы превысили тайм-аут.Вы можете узнать, что это, посмотрев на объект ошибки, полученный с помощью отклонения.
Обратите внимание, что в кошмар также встроены всевозможные опции тайм-аута, как описано в документе здесь .Вы также можете найти один из этих встроенных вариантов, независимо от точной цели вашего тайм-аута.