Спецификации контроллера и спецификации запросов?
Я работаю над API-интерфейсом rails, и теперь я планирую написать некоторые тесты RSpec для контроллеров.
Я читал об этом, и мне не удалось выяснить, какова фактическая разница между спецификациями контроллера и спецификациями запросов и какой из них я должен использовать, если я тестирую API.
Ответы
Ответ 1
Rails 3 & 4
Спецификации контроллера - Спецификация контроллера - это оболочка RSpec для функционального теста Rails. Это позволяет имитировать один HTTP-запрос в каждом примере, а затем
указать ожидаемые результаты
Спросите спецификации - Спросите требования обеспечивают тонкую оболочку для интеграционных тестов Rails, и
предназначен для управления поведением через весь стек, включая маршрутизацию
(предоставлено Rails) и без заглушки (это до вас).
Поэтому, если вы хотите протестировать контроллеры API, я бы рекомендовал использовать Controller specs
, поскольку вы тестируете отдельные запросы.
Рельсы 5+
Rails 5 улучшил скорость и реалистичность спецификаций запросов по сравнению с Rails версии 4 и спецификациями запросов. Официальная рекомендация команды Rails и основной команды RSpec - вместо этого писать спецификации запросов (спецификации контроллеров).
Ответ 2
Действительно, команда RSpec официально заявляет, что спецификации контроллеров устарели.
http://rspec.info/blog/2016/07/rspec-3-5-has-been-released/
Для новых приложений Rails: мы не рекомендуем добавлять в приложение гем тестирования rails-controller. Официальная рекомендация команды Rails и основной команды RSpec состоит в том, чтобы вместо этого написать спецификации запросов. Спецификации запроса позволяют вам сосредоточиться на одном действии контроллера, но в отличие от тестов контроллера включают маршрутизатор, стек промежуточного программного обеспечения, а также запросы и ответы стойки. Это добавляет реализма к тесту, который вы пишете, и помогает избежать многих проблем, которые часто встречаются в спецификациях контроллера. В Rails 5 спецификации запросов значительно быстрее, чем спецификации запросов или контроллеров в rails 4, благодаря работе Eileen Uchitelle1 из Rails Committer Team.
Ответ 3
Цитата Аарона Самнера:
Обе команды Rails и RSpec предлагают заменить или удалить тесты контроллера приложений (также известные как функциональный тестовый уровень), в предпочтения непосредственно тестируемых моделей (единиц) или более высокого уровня интеграционные тесты.
Для нового API я предпочитаю использовать спецификацию запроса и нажимать "конечные точки" (например, модели и бизнес-логику), чем на использование тестов контроллера.