【问题标题】:AVA: setup different timeout for each test caseAVA:为每个测试用例设置不同的超时
【发布时间】:2018-05-17 18:44:51
【问题描述】:

我使用 AVA 编写异步测试,并且需要为每个测试用例设置自定义超时。我没有找到任何关于这种可能性的信息,我的测试看起来像这样:

import test from 'ava';

test.cb('super test', t => {
    setTimeout(() => {
        t.is(1, 1);
        t.end();
    }, 10000);

    setTimeout(() => {
        t.fail("Timeout error!");
        t.end();
    }, 100);
});

有人知道在 AVA 中实现此功能的另一种方法吗?

【问题讨论】:

    标签: javascript unit-testing testing ecmascript-6 ava


    【解决方案1】:

    AVA 本身有一个未解决的问题来支持这一点:https://github.com/avajs/ava/issues/1565

    在此之前,您必须自己管理计时器。完成正常测试后不要忘记清除它。

    【讨论】:

    • 谢谢,我以前见过这个问题,但我希望有人知道如何做到这一点,知道任何解决方法或/和扩展点,我们可以如何添加此自定义功能。
    • @MaxVinogradov,链接问题中有示例代码的解决方法。
    【解决方案2】:

    我不知道 AVA 是否内置了类似的东西。我怀疑没有,因为它似乎是一个非常不寻常的用例。

    但是您可以创建一个实用函数来实现某种“超时测试”:

    import test from 'ava';
    
    function timeout (ms, fn) {
       return function (t) {
           setTimeout(() => {
               t.fail("Timeout error!")
               t.end()
           }, ms)
           fn(t)
       }
    }
    
    test.cb('super test', timeout(10000, t => {
        t.is(1, 1);
    }));
    

    【讨论】:

    • 非常感谢,我喜欢你解决问题的方法,现在我在我的项目中使用它 - 它让我减少了代码数量并使其更具可读性。
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多