rails rack_test feature example ruby-on-rails ruby rspec capybara

ruby on rails - rack_test - Prueba de páginas de error en Rails con Rspec+Capybara



ruby on rails selenium (4)

Con Rails 5.2, Capybara 3 pude simular errores de página con lo siguiente

around do |example| Rails.application.config.action_dispatch.show_exceptions = true example.run Rails.application.config.action_dispatch.show_exceptions = false end before do allow(Person).to receive(:search).and_raise ''App error simulation!'' end it ''displays an error message'' do visit root_path fill_in ''q'', with: ''anything'' click_on ''Search'' expect(page).to have_content ''We are sorry, but the application encountered a problem.'' end

Actualizar

Esto parece no funcionar siempre cuando se ejecuta el conjunto de pruebas completo. Así que tuve que configurar config.action_dispatch.show_exceptions = true en config/environments/test.rb y eliminar el bloque de entorno.

En Rails 3.2.9 tengo páginas de error personalizadas definidas así:

# application.rb config.exceptions_app = self.routes # routes.rb match ''/404'' => ''errors#not_found''

Que funciona como se esperaba. Cuando configuro config.consider_all_requests_local = false en development.rb obtengo la vista not_found al visitar /foo

Pero, ¿cómo puedo probar esto con Rspec + Capybara?

He intentado esto:

# /spec/features/not_found_spec.rb require ''spec_helper'' describe ''not found page'' do it ''should respond with 404 page'' do visit ''/foo'' page.should have_content(''not found'') end end

Cuando ejecuto esta especificación obtengo:

1) not found page should respond with 404 page Failure/Error: visit ''/foo'' ActionController::RoutingError: No route matches [GET] "/foo"

¿Cómo puedo probar esto?

Editar:

Olvidé mencionar: He configurado config.consider_all_requests_local = false en test.rb



La config.consider_all_requests_local = false debe establecerse en config/environments/test.rb de la misma manera que lo hizo con su desarrollo.

Si no desea hacer esto para todas las pruebas, tal vez un filtro rspec around sería útil para establecer el estado antes de la prueba y luego restaurar de esta forma:

# /spec/features/not_found_spec.rb require ''spec_helper'' describe ''not found page'' do around :each do |example| Rails.application.config.consider_all_requests_local = false example.run Rails.application.config.consider_all_requests_local = true end it ''should respond with 404 page'' do visit ''/foo'' page.should have_content(''not found'') end end


Si desea hacerlo y no desea cambiar config/environments/test.rb , puede seguir la solución de esta post .