Четвёртый месяц на первой работе. Пишу тесты на эндпоинт создания счёта и запуталась: валидацию суммы проверять в request-спеке или в модели? Сейчас одно и то же проверяется у меня в двух местах, ревьюер пишет, что это лишнее, но не объясняет, где правильно. Раньше работала бухгалтером, привычка всё перепроверять, видимо)
Грубое правило: модельный тест проверяет правила, а 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
Тогда при изменении лимита правите одно место, а не пять.
обычно так и делят. в request-спеке ещё удобно проверять авторизацию, в модели её не проверишь
Раздел про тестирование в гайдах Rails хорошо раскладывает, какой тип теста за что отвечает, хоть там и Minitest: https://guides.rubyonrails.org А ревьюера спросите прямо, где он сам ожидает эту проверку. Это нормальный рабочий вопрос, его не стыдно задать.