如何在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()
)。
这是一个完整的例子。 你需要在每个断言中调用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");