Используйте спецификацию функции (интеграционный тест) вместо спецификации контроллера, чтобы протестировать приложение, видимое пользователем:
# spec/features/topics.rb
require 'rails_helper'
RSpec.feature "Topics" do
scenario "when I create a topic with valid attributes" do
visit '/topics/new'
fill_in 'Topicname', with: 'Behavior Driven Development' # Adjust this after whatever the label reads
click_button 'create topic'
expect(page).to have_content 'Topic was created successfully!'
end
scenario "when I create a topic but the attributes are invalid" do
visit '/topics/new'
fill_in 'Topicname', with: ''
click_button 'create topic'
expect(page).to_not have_content 'Topic was created successfully!'
expect(page).to have_content "Topicname can’t be blank"
end
end
Хотя вы можете разбираться с флеш-хэшем, у вас должен быть интеграционный тест, охватывающий это в любом случае, поскольку тесты контроллера являются ошибочными и не будут охватывать, например, ошибки в маршрутах, так как большие части приложения заглушаются.
На самом деле вы, возможно, захотите пересмотреть вопрос об использовании спецификаций контроллера, поскольку команды RSpec и Rails предлагают вместо этого использовать интеграционное тестирование. Если вы хотите выполнить тестирование на более низком уровне, чем спецификации функций, используйте спецификации запросов .
См: