我在Mocha / Node js中编写测试,并希望在执行代码块之前使用setTimeout等待一段时间。
我该如何做到这一点?
似乎在Mocha测试用例中,setTimeout()不起作用。 (我知道你可以为每个测试用例和每个测试文件设置setTimeout,这不是我在这里需要的。)
在使用Node运行的js文件中,即node miniTest.js
,这将等待3秒,然后在setTimeout函数内打印该行。
console.log('waiting 3 seconds...');
setTimeout(function() {
console.log('waiting over.');
}, 3000);
在使用Mocha运行的js文件中,即mocha smallTest.js
,这将不会等待,并且将完成执行并退出而不会在setTimeout函数内打印该行。
mocha = require('mocha');
describe('small test', function() {
it('tiny test case', function() {
console.log('waiting 3 seconds...');
setTimeout(function () {
console.log('waiting over.')
}, 3000);
});
});
答案 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()
之后)。
答案 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();
});
});