RSpec: В чем разница между функцией и спецификацией запроса?

Какова концептуальная разница между спецификациями функций Rspec и спецификациями запросов?

Из спецификаций спецификации:

Спецификации функций - это тесты высокого уровня, предназначенные для использования фрагментов функциональности через приложение. Они должны управлять приложением только через его внешний интерфейс, обычно веб-страницы.

И для спецификации запроса:

Спецификации запроса предоставляют тонкую оболочку вокруг интеграционных тестов Rails и предназначен для управления поведением через полный стек, включая маршрутизацию (предоставляется Rails) и без окунания (что до вас). С помощью спецификаций запросов вы можете:

  • укажите один запрос
  • указать несколько запросов на нескольких контроллерах
  • указать несколько запросов на нескольких сеансах.

Я знаю, что спецификации функций используют Capybara и не требуют спецификаций запросов. Но это вряд ли заслуживает различных концепций.

Ответ 1

Концептуальная разница заключается в том, что вы обычно тестируете историю пользователей, и все взаимодействие должно осуществляться через пользовательский интерфейс. Это место, где приходит Capybara. Спецификация запроса все еще тестирует поведение вашего приложения и не имеет ожиданий читаемости, которую может получить приемочный тест. Таким образом, функция улучшенного синтаксиса приемочных тестов.

Технические отличия включают спецификации запросов, которые включают тесты интеграции Rails, в то время как спецификации функций нет. Это означает, что с помощью спецификаций запросов вы можете использовать методы get, post, put, delete и assert from response. С характеристиками функций вы должны управлять всем взаимодействием через браузер и использовать методы, такие как посещение и утверждение на странице.

Я бы рекомендовал прочитать feature_spec.feature в исходном коде rspec-rails на github. Надеюсь, это поможет.