我使用Mocha为Node API编写测试。在一个测试中,我需要执行2个操作并比较每个操作的时间戳并确保它们不同。为此,我需要可靠地暂停测试执行至少一秒钟。我试图在第二次调用setTimeout
之前使用ping
暂停Mocha执行,但它没有发生。
it( 'should insert then update the timestamp.', function( done ) {
Do.ping( 'arg1', function( err, result ) {
should.not.exist( err );
setTimeout( Do.ping( 'arg1', function( err, result ) {
// Test that the timestamp of the first ping is before the timestamp
// of the second ping (among other things)
done();
}), 1000 );
});
});
任何人都能看到我在这里蠢蠢欲动吗?或者,是否有更好的(即更多Mocha-ish)方式来做我想做的事情?
答案 0 :(得分:2)
我最终使用了Sinon的假计时器API,它一直运行良好。分别在beforeEach()
和afterEach()
中实例化并重置假计时器。在实际测试中,只需按照您需要的方式推进时钟:
clock.tick( 180000 ); // Advances the JS clock 3 minutes (180 seconds)
答案 1 :(得分:0)
让我建议一个(未经测试的)替代方案:
var async = require('async')
it( 'should insert then update the timestamp.', function( done ) {
async.series([
Do.ping( 'arg1', function( err, result ) {
should.not.exist( err );
},
setTimeout(console.log('waiting'),1000);
},
Do.ping( 'arg2', function( err, result ) {
should.not.exist( err );
},
done();]
});
});
我认为通过使用async.series,您将能够更可靠地暂停mocha进入第二次调用。
答案 2 :(得分:-1)
我已使用sleepfor
添加了npm install sleepfor
包。在我的测试中,我有以下内容:
const sleepfor = require('sleepfor');
describe('My Test', function() {
it('should test something here.', function(){
// Run some test code here.
});
it('should test something ELSE here.', function(){
// Run different test code here.
});
afterEach(function(){
var d = new Date();
console.log(d.toLocaleString() + " >> Before sleep.");
sleepfor(5000);
var d = new Date();
console.log(d.toLocaleString() + " >> After sleep.");
});
});
应该是显而易见的,但为了以防万一,在每次阻止执行后调用afterEach
。