Что проверять в req...
 
Уведомления
Очистить всё

Что проверять в request-спеке, а что в спеке модели? Путаюсь

4 Сообщения
4 Пользователи
2 Реакции
675 Просмотры
lena_bogatyreva
Сообщения: 27
Автор темы
Читает чужие PR бэкенд-разработчица
Присоединился: 3 года назад
[#47]

Четвёртый месяц на первой работе. Пишу тесты на эндпоинт создания счёта и запуталась: валидацию суммы проверять в request-спеке или в модели? Сейчас одно и то же проверяется у меня в двух местах, ревьюер пишет, что это лишнее, но не объясняет, где правильно. Раньше работала бухгалтером, привычка всё перепроверять, видимо)


3 ответа
kostya.sokurov
Сообщения: 73
Держит прод бэкенд-разработчик, senior
Присоединился: 4 года назад

Грубое правило: модельный тест проверяет правила, а request-спек проверяет, что эндпоинт эти правила применяет и правильно отвечает. Все варианты невалидной суммы (ноль, минус, больше лимита, строка вместо числа) живут в спеке модели. В request-спеке хватит одного случая, что невалидный счёт не создался и вернулся 422 с ошибкой:

it "не создаёт счёт с нулевой суммой" do
  expect {
    post "/invoices", params: { invoice: { amount: 0 } }, as: :json
  }.not_to change(Invoice, :count)

  expect(response).to have_http_status(:unprocessable_entity)
  expect(response.parsed_body["errors"]).to include("amount")
end

Тогда при изменении лимита правите одно место, а не пять.


Ответ
Юлия Макарова
Сообщения: 8
Разобрался с блоками бэкенд-разработчица
Присоединился: 2 года назад

обычно так и делят. в request-спеке ещё удобно проверять авторизацию, в модели её не проверишь


Ответ
Ксения 90
Сообщения: 18
Пишет тесты QA-автоматизатор
Присоединился: 4 года назад

Раздел про тестирование в гайдах Rails хорошо раскладывает, какой тип теста за что отвечает, хоть там и Minitest: https://guides.rubyonrails.org А ревьюера спросите прямо, где он сам ожидает эту проверку. Это нормальный рабочий вопрос, его не стыдно задать.


Ответ