如何在Mocha测试用例中使用setTimeout()函数?

nya*_*sha 11 javascript mocha.js node.js

我正在Mocha/Node js中编写测试,并希望在执行代码块之前使用setTimeout等待一段时间.

我怎么能做到这一点?

看来在Mocha测试用例中,setTimeout()不起作用.(我知道你可以为每个测试用例和每个测试文件设置setTimeout,这不是我在这里需要的.)

在使用Node运行的js文件中,即,node miniTest.js这将等待3秒,然后在setTimeout函数内打印该行.

miniTest.js

console.log('waiting 3 seconds...');
setTimeout(function() {
    console.log('waiting over.');
}, 3000);
Run Code Online (Sandbox Code Playgroud)

在使用Mocha运行的js文件中,即,mocha smallTest.js它不会等待,并且将完成执行并退出而不会在setTimeout函数内打印该行.

smallTest.js:

mocha = require('mocha');

describe('small test', function() {
    it('tiny test case', function() {
        console.log('waiting 3 seconds...');
        setTimeout(function () {
            console.log('waiting over.')
        }, 3000);
    });
});
Run Code Online (Sandbox Code Playgroud)

Nee*_*ngh 25

您忘记传入参数it('tiny test case', function()并在setTimeout方法中的console.log之后调用done().

describe('small test', function(){
   it('tiny test case', function(done){
       console.log('waiting 3 seconds');
       setTimeout(function(){
           console.log('waiting over.');
           done();
       }, 3000)
   })
})
Run Code Online (Sandbox Code Playgroud)

  • @ userMod2是的,只要您的代码是同步的,一个接一个地运行每个步骤,设置超时就足够了.但是OP中的代码(任何使用`setTimeout`的代码)都是*asynchronous*,这意味着它会立即返回,而函数参数将在以后运行.令人困惑的是,这里有两种称为"超时"的东西:`this.timeout = x`表示"如果我的测试运行时间超过x ms,则认为它是失败的".`setTimeout(function,x)`表示"等待x ms后,运行我的函数". (3认同)
  • 如何在新的异步等待语法中做到这一点? (2认同)