alex4answ
@alex4answ

Как протестировать функцию, которая генерирует функцию?

Добрый день, изучаю тестирование, базовые чистые функции и тп вопросов не вызывают, но не совсем могу понять как тестировать такого рода функции:
exports.isExistsValidator = (model, field) => {
  return async (value) => {
    const result = await model.findOne({ where: { [field]: value } });
    if (!result) {
      return Promise.reject(`${model.name} with ${field} = ${value} does not exists`);
    }
  }
};

Как тестировать?, кроме того что:
1. "Должна вернуть асинхронную функцию"

Выходит я должен создать стаб модели?

P.S. Как называют функции которые возвращает функцию? (под определения Функции Высшего Порядка не подходит)
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Как называют функции которые возвращает функцию

Как раз если функция принимает или возвращает другую функцию, асинхронную или нет, это и есть функция высшего порядка. Возвращаемые функции названия не имеют, просто функции.
Должна вернуть асинхронную функцию

Технически можно проверить является ли функция асинхронной, проверив имя ее конструктора, но делать так не надо, ибо разработчик может заменить в будущем реализацию функции на использование промисов без объявления асинхронной функции, и тест будет падать. Соответственно проверять нужно не тип функции, а то, что ее результат это Promise или Thenable.
return Promise.reject(`${model.name} with ${field} = ${value} does not exists`);

Тут легаси код - внутри async обычно используют
throw Error(`${model.name} with ${field} = ${value} does not exists`);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы