如何在Mochatesting用例中使用setTimeout()函数?

我正在Mocha / Node js中编写一个testing,并希望在执行一段代码之前使用setTimeout来等待一段时间。

我怎样才能做到这一点?

看起来在摩卡testing案例中,setTimeout()不起作用。 (我知道你可以设置每个testing用例和每个testing文件的超时时间,这不是我需要的。)

在一个运行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); }); }); 

您忘记了在setTimeout方法中传递参数it('tiny test case', function()和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) }) }) 

让您的testingfunction采取一个参数(通常称为done )。 摩卡将传递一个函数,你会在setTimeout函数中调用(例如在console.log调用done() )。

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

这是一个完整的例子。 你需要在每个断言中调用done()。 您可以省略before函数,并在其中一个函数中执行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(); }); }); 

你需要在testing中做一个parameter passing,一旦testing通过就会被调用。

你可以写你的testing

 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秒后,它会打印“等待”,并通过testing。 你也可以在超时时间内有条件,这取决于条件是否满足,你可以通过调用来通过testing

 done(); 

或者通过抛出错误或传递错误消息来使testing失败

 done("Test Failed");