assert.throws говорит => Отсутствует ожидаемое исключение - PullRequest
0 голосов
/ 21 сентября 2018

Я использую этот фрагмент кода:

       assert.throws(async () => {
            patientSubscriber = await PatientSubscriber.create({
                isSubscribed: true,
                patient: patient._id,
                subscriber: user._id
            });
        },{
             message: /foo/
        });

, когда я запускаю его, я получаю следующее:

AssertionError [ERR_ASSERTION]: отсутствует ожидаемое исключение.

API подтверждения: https://nodejs.org/api/assert.html#assert_assert_throws_fn_error_message

Может быть, я решаю эту проблему?https://github.com/nodejs/node-v0.x-archive/issues/8368

Кто-нибудь знает, о чем эта ошибка?

1 Ответ

0 голосов
/ 21 сентября 2018

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

Поскольку ожидается, что утверждение будет синхронным, утверждать обещания таким способом невозможно;весь стек вызовов должен быть основан на обещаниях.

Как было упомянуто в комментариях, assert.rejects появился в узле 10 и приводит к отклонению обещания при ошибке подтверждения.

В случае, если обещания обрабатываютсявызывающий объект (например, в большинстве сред тестирования), отклоненное обещание должно быть возвращено из текущей функции:

it('...', async () {
  await assert.rejects((async () => {})()); // current function returns rejected promise
});

Если обещания подтверждения не обрабатываются (например, в производстве), они приводят к консоли UnhandledPromiseRejectionWarningвывод, а не в исключениях.Обработчик unhandledRejection может быть настроен на обработку асинхронных ошибок:

process.on('unhandledRejection', err => {
  console.error(err);
  process.exit(1);
});

...

assert.rejects((async () => {})());
...