如何让噩梦强行超时

时间:2018-04-26 01:54:54

标签: javascript node.js typescript mocha nightmare

正如标题所暗示的那样,我试图使我的脚本强制超时,特别是如果条件(返回select distinct gender, percentile_cont(0.5) over (partition by gender order by height) from heights; )没有得到满足。

以下是一些代码:

done()

如果我的代码中有任何其他错误,请随时告诉我。

1 个答案:

答案 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中描述的噩梦中还有各种超时选项。您也可以找到其中一个内置选项,无论超时的确切目的是什么。