Спецификации контроллера и спецификации запросов?

Я работаю над 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 я предпочитаю использовать спецификацию запроса и нажимать "конечные точки" (например, модели и бизнес-логику), чем на использование тестов контроллера.