Мокко истекло, когда тест в обратном вызове Promise не проходит - PullRequest
0 голосов
/ 14 ноября 2018

Если у меня есть следующий модуль:

module.exports = kontinue => {
  Promise.resolve({error:null})
    .then(o => {
      console.log('promise resolved');
      // say something goes wrong here
      if(true)
        kontinue({error:'promise resolved but something else went wrong'});
      else kontinue(o);
    })
    .catch(error => {
      console.log('caught error');
      kontinue({error:'promise rejected, or resolved but then continuation threw exception'})
    });
};


И следующий тест:

const assert = require('assert').strict;
const target = require('./the_above_code.js');

it('should not timeout', (done) => {
  target((sut) => {
    console.log('continuation called');
    assert.ok(false); // the test for sut.error === what I expected was failing
    done();
  });
});


Выходные данные:

promise resolved
continuation called
caught error

...

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.


Я понимаю, что это потому, что .catch () возвращает новое обещание, которое не разрешается, но это не то, чего я действительно хочу во время тестирования.

Как я могу проверить объект, к которому относится обещание, провалить тест в случае необходимости, заставить Mocha сообщить об этом сбое?

Возможно, есть другое место, кроме продолжения (которое никогда не возвращается в коде, использующем этот модуль), которое я могу поставить тесты?

Я уверен, что монады могут уменьшить количество стандартного кода здесь, но их использование наверняка нарушит максиму Кернигана .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...