Модульное тестирование не выполнено - PullRequest
0 голосов
/ 26 июня 2018

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

someAsync(text) {
  try {
    //do something and resolve result
    return Promise.resolve(result);
  } catch (err) {
    return Promise.reject(new Error(`Failure ${err}`));
  }
}

Я тестирую его с помощью следующего кода:

it('should throw error when called', (done) => {
  const mymodule = new MyModule(args);
  mymodule.someAsync('something that causes failure').catch((err) => {
    expect(err).to.exist;
    expect(err.message).to.contains('This should pass');
    done(err);
  });
});

Этот тестовый пример не пройден, утверждения пройдены, а после повторного выполнения выдает ошибку Пожалуйста, скажите мне, где я иду не так?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

done(err) вызывает сбой спецификации. Так как это ожидаемая ошибка, она не должна выходить из спецификации, вместо нее должна быть done().

Мокко не требуется done для обработки обещаний, обещание может быть возвращено из спецификации.

Вероятно, должно быть:

it('should throw error when called', () => {
  const mymodule = new MyModule(args);
  return mymodule.someAsync('something that causes failure').catch((err) => {
    expect(err).to.exist;
    expect(err.message).to.contain('This should pass');
  });
});

Кроме того, из приведенного кода не очевидно, что expect(err.message).to.contain('This should pass') утверждение верно.

0 голосов
/ 26 июня 2018

Это может иметь или не иметь никакого отношения к вашей ошибке, но на самом деле это не похоже на асинхронный код. Нечто подобное может иметь больше смысла:

const someAsync = (text) => new Promise((resolve, reject)) => {
  try {
    // do something and capture result
    resolve(result);
  } catch (err) {
    reject(new Error(`Failure ${err}`));
  }
})

Как сказано в комментарии Estus, нам, вероятно, понадобится фактическая ошибка и тестовая структура для дальнейшей диагностики.

...