正如标题所暗示的那样,我试图使我的脚本强制超时,特别是如果条件(返回select distinct gender, percentile_cont(0.5) over (partition by gender order by height)
from heights;
)没有得到满足。
以下是一些代码:
done()
如果我的代码中有任何其他错误,请随时告诉我。
答案 0 :(得分:0)
您可以使用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()
处理程序触发,那么它是因为噩梦请求失败或您达到超时。您可以通过查看拒绝获得的错误对象来判断它是什么。
请注意,doc here中描述的噩梦中还有各种超时选项。您也可以找到其中一个内置选项,无论超时的确切目的是什么。