невозможно обработать асинхронную ошибку в шутку, когда ошибка выдается в операторе if-else

#javascript #express #jestjs

#javascript #выразить #jestjs

Вопрос:

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

 router.post('/api/users/signUp', async (req: Request, res: Response) => {

  const { email, password } = req.body;

  const error = validateAuthInput({ email, password });
  if (error) {
    console.log(error) // "email" must be longer than 5 characters or so
    throw new Error(error);
  }
}) 
 

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

 it('throws an Error', async () => {
  const res = request(app)
    .post('/api/users/signUp')
    .send({ email: 'test', password: 'password' });

  await expect(res).rejects.toThrow();
});
 

Запрос обрабатывается библиотекой supertest.
Я перепробовал все способы ожидания результата, но не смог этого сделать.

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

1. Во .rejects.toThrow -первых, это действительно не имеет смысла, отклонение отличается от выдачи ошибки. Но, во-вторых, просто выдача ошибки из обработчика — это не то, как вы справляетесь с ошибками на уровне API (и, вероятно, вообще не будет работать), вам нужно ответить кодом 4xx или 5xx, чтобы сообщить клиенту, в чем проблема. Другими словами, ваш код и тест неверны.

2. Не могли бы вы рассказать мне, какими должны быть мой код и тест?

3. Я знаю .отклоняет. toThrow() здесь не имеет смысла, но я сказал, что пробовал несколько способов. Так что это просто случайная попытка, которую я сделал

4. Ну, сначала вам нужно решить, каким должен быть статус ответа и, возможно, тело, затем написать тест request(app)....expect(status[, body]) для документов supertest, а затем написать код реализации для прохождения теста.

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