8

我正在使用 Mocha 为 Node API 编写测试。在一项测试中,我需要执行 2 个操作并比较每个操作的时间戳并确保它们不同。为此,我需要可靠地暂停测试执行至少一秒钟。我试图setTimeout在第二次调用之前暂停 Mocha 执行ping,但它没有发生。

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 );
  });
});

有人看到我在这里搞砸了什么吗?或者,是否有更好的(即更摩卡风格)的方式来做我想做的事情?

4

3 回答 3

1

我最终使用了 Sinon 的假计时器 API,它运行良好。分别在beforeEach()和中实例化和重置假计时器。afterEach()在实际测试中,只需以您需要的任何方式提前时钟:

clock.tick( 180000 ); // Advances the JS clock 3 minutes (180 seconds)
于 2013-08-01T17:03:28.407 回答
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 进行第二次通话。

于 2013-07-26T21:19:28.770 回答
-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在您的每个 it 块执行之后调用。

于 2017-08-10T14:52:11.703 回答