Javascript 如何在Mocha测试用例中使用setTimeout()函数?
我正在用Mocha/Node js编写一个测试,并希望在执行代码块之前使用setTimeout等待一段时间 我怎样才能做到这一点 似乎在Mocha测试用例中,setTimeout()不起作用。(我知道您可以为每个测试用例和每个测试文件设置超时,这不是我在这里需要的。) 在使用Node运行的js文件中,即,Javascript 如何在Mocha测试用例中使用setTimeout()函数?,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,我正在用Mocha/Node js编写一个测试,并希望在执行代码块之前使用setTimeout等待一段时间 我怎样才能做到这一点 似乎在Mocha测试用例中,setTimeout()不起作用。(我知道您可以为每个测试用例和每个测试文件设置超时,这不是我在这里需要的。) 在使用Node运行的js文件中,即,Node miniTest.js,这将等待3秒钟,然后在setTimeout函数内打印该行 miniTest.js 在使用Mocha运行的js文件中,即,Mocha smallTest.js,它
Node miniTest.js
,这将等待3秒钟,然后在setTimeout函数内打印该行
miniTest.js
在使用Mocha运行的js文件中,即,Mocha smallTest.js
,它不会等待,并且将完成执行并退出,而不会在setTimeout函数中打印该行
smallTest.js:
让测试函数获取一个参数(通常称为
done
)。Mocha将传递一个您将在setTimeout
函数中调用的函数(例如,在console.log
calldone()
之后)
请参阅。您忘记了在
中传递参数('tiny test case',function()
和call done(),在console.log之后输入setTimeout方法
describe('small test', function(){
it('tiny test case', function(done){
console.log('waiting 3 seconds');
setTimeout(function(){
console.log('waiting over.');
done();
}, 3000)
})
})
您需要在测试中作为参数传递,一旦测试通过,将调用该参数 您可以像这样编写测试
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");
这是一个完整的例子。您需要在每个断言中调用done()。您可以省略before函数,在其中一个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();
});
});
非常感谢你!这将运行并等待分配的时间。嗨-为什么需要添加
done
?如果只是一个包含许多步骤的测试,那么只需使用this.timeout=60000
?@userMod2是的,只要代码是同步的,一步一步地运行每个步骤,设置一个超时就足够了。但是OP中的代码(使用setTimeout
的任何代码)是异步的,这意味着它会立即返回,函数参数会在将来运行。可以理解的是,混淆了这里有两种叫做“超时”的东西:<代码> Time.TimeOut[x意味着“如果我的测试运行得比XMs长,就认为它是一个失败”。code>setTimeout(function,x)表示“等待x毫秒后,运行我的函数”。如何在新的异步等待语法中执行此操作?done
应在it
中传递,而不是在description
中传递。在新的异步等待语法中如何做到这一点?在新的异步等待语法中如何做到这一点?
done("Test Failed");
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();
});
});