Как я могу проверить, правильно ли вызван setTimeout? - PullRequest
0 голосов
/ 11 мая 2018
function restartService(startTime) {
  const endTime = (new Date()).getTime();
  const fiveMinLeft = 5 * 60 * 1000 - (endTime - startTime);
  console.log(startTime, endTime, fiveMinLeft);
  setTimeout(() => {
    console.log('clock');
    Producer.create({
      queueUrl: process.env.MY_QUEUE
    }).send([{
      stuff: true
    }], (err) => {
      console.log('err', err);
    });
  }, fiveMinLeft);

  return Promise.resolve();
}

Мой тест

  it.only('send a message after 5 minutes to the queue', (done) => {
    const msg = 'msg'
    const sendStub = sinon.spy();
    const clock = sinon.useFakeTimers();

    sinon.stub(global.db.Deposit, 'findAll').returns(Promise.resolve([{
      id: 2
    }]));

    sinon.stub(global.db.Transaction, 'findOrCreate').returns(Promise.resolve());
    sinon.stub(Producer, 'create').returns({
      send: sendStub
    });

    WatcherService.handleMessage(msg, () => {
      global.db.Transaction.findOrCreate.restore();
      global.db.Deposit.findAll.restore();
      Producer.create.should.be.called();

      done();
    });

    clock.tick(5 * 1000 * 60);
  });

Это время истекло.Я увеличил timeout тестовой функции, но это все равно в конечном итоге истекло.Что я делаю не так?

1 Ответ

0 голосов
/ 21 мая 2018

В mocha я установил таймаут следующим образом:

it("send message", function(done) {
    this.timeout(15000);
    setTimeout(() => {
           ...
           done()
     }, 5000);
  })

Обратите внимание на одну вещь: я использую «функцию», так что «this» является правильным объектом.

С сайта

...