#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. Но я все еще хочу это проверить. Как я должен ожидать этого?