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

时间:2015-09-23 02:46:48

标签: javascript node.js mocha

我在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);

在使用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);
    });
});

4 个答案:

答案 0 :(得分:20)

您忘记在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)
   })
})

答案 1 :(得分:1)

让测试函数采用参数(通常称为done)。 Mocha将传递您在setTimeout函数中调用的函数(例如,在console.log调用done()之后)。

请参阅https://mochajs.org/#asynchronous-code

答案 2 :(得分:1)

你需要在测试中作为参数传递,一旦测试通过就会被调用。

您可以像

一样编写测试
mocha = require('mocha');

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

});

这将等待3秒后,它将打印'等待'并通过测试。你也可以在超时内有条件,具体取决于条件是否满足你可以通过调用

来通过测试
done();

或者通过抛出错误或在

中传递错误消息来使测试失败
done("Test Failed");

答案 3 :(得分:1)

这是一个完整的例子。你需要在你做的每个断言中调用done()。你可以省略之前的函数并在你的 it 函数中执行setTimeout,但它仍然应该在assert之后使用并调用done()。

var foo = 1;
before(function(done) {
  setTimeout(function(){
    foo = 2;
    done();
  }, 500)
});

describe("Async setup", function(done){

  it("should have foo equal to 2.", function(done){
    expect(foo).to.be.equal(2);
    done();
  });

  it("should have foo not equal 3.", function(done){
    expect(foo).to.be.not.equal(3);
    done();
  });

});