Могу ли я как-то объявить, что тест ожидает необработанных отклонений?

#ava

#ava

Вопрос:

У меня есть библиотека, которая налагает «измерение» на некоторый код. Обычный случай легко протестировать, когда код выполняется до завершения и счетчик не превышен.

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

AVA в настоящее время завершает мой тестовый запуск с:

   1 test passed
  1 unhandled rejection
  

По сути, тест сводится к:

 const expectedLog = ['a'];
test('unhandled rejection', async t => {
  const log = [];
  // I don't have control over the code in f():
  const f = async () => {
    log.push('a');
    // This is a side-effect, but fails the test.
    Promise.reject(RangeError('metering'));
    throw RangeError('metering');
  };
  await t.throwsAsync(() => f(), { instanceOf: RangeError });
  t.deepEqual(log, expectedLog);
});
  

Есть ли у меня какой-либо способ сообщить AVA, что я ожидал 1 необработанного отклонения?

Я требую не изменять тестируемый код ( f функция выше), поскольку весь смысл в том, чтобы проверить, что измерение останавливает код на месте, независимо от того, что это за ненадежный код.

Ответ №1:

Есть ли у меня какой-либо способ сообщить AVA, что я ожидал 1 необработанного отклонения?

Нет. Необработанные отклонения указывают на ошибки, и поэтому AVA не выполнит тестовый запуск. Как сопровождающий AVA, я не думаю, что есть достаточная причина для изменения этого поведения.

Я требую не изменять тестируемый код (функция f выше), поскольку весь смысл в том, чтобы проверить, что измерение останавливает код на месте, независимо от того, что это за ненадежный код.

Отклонение обещания, которое затем собирается как мусор, не повлияет на ненадежный код. Если вы находитесь в async функции, которую вы можете использовать throw напрямую.

Комментарии:

1. Как мне протестировать код, который сам устанавливает unhandledRejection обратный вызов?