我如何在Mocha测试用例中使用setTimeout()函数
How can I use setTimeout() functions within Mocha test cases?
我正在Mocha/Node js中编写一个测试,并希望在执行代码块之前使用setTimeout等待一段时间。
我怎样才能做到这一点?
似乎在Mocha测试用例中,setTimeout()不起作用。(我知道您可以为每个测试用例和每个测试文件设置timeout,这不是我在这里需要的。)
在使用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);
});
});
您忘记在it('tiny test case', function()
中传递参数并在console.log中调用setTimeout方法后调用done()
describe('small test', function(){
it('tiny test case', function(done){
console.log('waiting 3 seconds');
setTimeout(function(){
console.log('waiting over.');
done();
}, 3000)
})
})
您需要在测试中将done passed作为一个参数,该参数将在测试通过后被调用。
你可以像
那样写你的测试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秒,之后它将打印'waiting over'并通过测试。您还可以在超时内设置一个条件,这取决于该条件是否满足。您可以通过调用
来通过测试。done();
或通过抛出错误或在
中传递错误消息而使测试失败done("Test Failed");
让您的测试函数接受一个参数(通常称为done
)。Mocha将传递一个函数,您将在setTimeout
函数中调用该函数(例如,在console.log
调用done()
之后)。
看到https://mochajs.org/异步代码。
这是一个完整的示例。您需要在每个断言中调用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();
});
});
- setTimeout函数能否在其前面的代码执行之前激发
- JS:setTimeout函数的UI计数
- Jasmine:测试setTimeout函数会抛出一个错误
- Javascript/Jquery setTimeout 函数不适用于长 html
- 如何让 setTimeout 函数运行,然后停止使用循环
- 有没有办法覆盖 setTimeout 函数,使其使用微秒而不是毫秒
- setTimeout函数的精确计时
- Javascript-为什么不是't此setTimeout函数正在工作
- 阻止页面重新加载时的setTimeout函数
- 2 setTimeout函数第一个清除第二个javascript
- 如何在 setInterval/setTimeout 函数中按名称调用函数
- Javascript SetTimeOut函数不知怎么不起作用
- Javascript setTimeOut 函数与 .net 中 Windows 应用程序的计时器不匹配
- Javascript setTimeout 函数保持运行
- 当 ajax 返回 1 时如何删除 setTimeout 函数
- setTimeout 函数比它应该的更快
- Javascript:我的setTimeout函数由于第三方而不起作用
- 如何或在哪里将javascript settimeout函数添加到CSS垂直下拉菜单
- 在 javascript 对象中使用方法的值以在 setTimeout 函数中使用
- 如何阻止此 setTimeout 函数运行