assigns
был доступен только в тестах контроллера - в Rails 5 он был устаревшим.
Тестирование переменных экземпляра, установленных вашим контроллером, является плохой идеей.Это серьезно выходит за рамки того, о чем должен знать тест.Вы можете проверить, какие файлы cookie установлены, какой HTTP-код возвращается, как выглядит представление или какие мутации произошли с БД, но проверка внутренних возможностей контроллера просто не очень хорошая идея.
- Дэвид Хайнемайер Ханссон
В спецификациях контроллера RSpec используется устаревшая ActionController::TestCase
.
Спецификация контроллера определяется наличием метаданных type: :controller
.
RSpec.describe ThingsController, type: :controller do
# ...
describe "GET #index" do
end
end
Если вы установили config.infer_spec_type_from_file_location!
в config.infer_spec_type_from_file_location!
RSpec выведет, что любая спецификация в spec/controllers
имеет type: :controller
.
Следует избегать спецификаций контроллера для новых приложений впользу запроса и технические характеристики.Одна из основных проблем со спецификациями контроллеров, кроме нарушения инкапсуляции, заключается в том, что весь этап запроса заглушается, запрос фактически не проходит через стойку или маршруты, которые могут маскировать ошибки маршрутизации, и означает, что промежуточное ПО Rack, такое как Warden (используется Devise)или сеансы должны быть заглушены.
Если у вас есть устаревшее приложение, вы можете повторно ввести assigns
с драгоценным камнем .Если вы только изучаете RSpec, вам следует выбрать более современные учебные пособия.
Спецификации функций - это высокоуровневые тесты, предназначенные для демонстрации функциональности в приложении.Они должны управлять приложением только через его внешний интерфейс, обычно веб-страницы.
https://relishapp.com/rspec/rspec-rails/v/3-7/docs/feature-specs
Используйте спецификации функций для тестов высокого уровня, основанных на истории пользователя.Используйте RSpec.feature "New Cool Feature"
для написания спецификации функции.
Спецификации запроса предоставляют тонкую оболочку для интеграционных тестов Rails и предназначены для управления поведением через полный стек, включая маршрутизацию (предоставляемую Rails) и без использования заглушек (это ваше дело).
https://relishapp.com/rspec/rspec-rails/v/3-7/docs/request-specs/request-spec
Используйте RSpec.describe "Some resource", type: :request
для написания спецификации функции.
Спецификации запроса неоценимы для тестирования API 'или когда вам просто нужны быстрые тесты, которые гарантируют, что правильные мутациислучилось с БД или что отправлены правильные ответы http.
См .: