ruby on rails - proyecto - Rspec y rutas con nombre
scaffold ruby on rails (6)
Soy bastante nuevo en los rieles, y trato de seguir el railstutorial. Todo va bien, excepto por mis pruebas que no pueden pasar las rutas nombradas (5.3.3)
Mis rutas.rb:
SampleApp::Application.routes.draw do
resources :users
match ''/signup'', to: ''users#new''
match ''/help'', to: ''static_pages#help''
match ''/about'', to: ''static_pages#about''
match ''/contact'', to: ''pages#contact''
root to: ''static_pages#home''
#Commented stuff
Mis primeras pruebas (spec / controllers / static_pages_controller_spec.rb):
describe "Static pages" do
subject { page }
shared_examples_for "all static pages" do
it { should have_selector(''h1'', text: heading) }
it { should have_selector(''title'', text: full_title(page_title)) }
end
describe "Home page" do
before { visit root_path }
let(:heading) { ''Sample App'' }
let(:page_title) { ''Home'' }
it_should_behave_like "all static pages"
end
#Other tests
El spec_helper.rb parece (sin todas las cosas comentadas)
ENV["RAILS_ENV"] ||= ''test''
require File.expand_path("../../config/environment", __FILE__)
require ''rspec/rails''
require ''rspec/autorun''
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
end
Los errores que recibo de rspec son todos como este:
Static pages Home page it should behave like all static pages
Failure/Error: before { visit root_path }
NameError:
undefined local variable or method `root_path'' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1::Nested_1:0x00000004a12210>
Shared Example Group: "all static pages" called from ./spec/controllers/static_pages_controller_spec.rb:17
# ./spec/controllers/static_pages_controller_spec.rb:13:in `block (3 levels) in <top (required)>''
Ya traté de usar
include Rails.application.routes.url_helpers
en el spec_helper, pero cambió mis errores a
Static pages Home page it should behave like all static pages
Failure/Error: Unable to find matching line from backtrace
SystemStackError:
stack level too deep
# /usr/lib/ruby/1.9.1/forwardable.rb:185
También probé una forma diferente de cambiar el nombre de mis rutas, pero ninguna de ellas funcionó. Estoy de vuelta a la versión tutorial.
Si puede ser de alguna ayuda para encontrar qué es exactamente un problema, estoy en Ubuntu 11.10, con rieles 3.2.1 y ruby 1.9.2p290. Espero que puedan ayudarme. Pasé bastante tiempo buscando una solución en Google y no encontré ninguna ^^ ''
Deberías haber usado
rails generate rspec:install
en lugar de
rspec --init
y no habría tenido que modificar el archivo de configuración.
Sin embargo, no lo hagas ahora o tu aplicación se romperá y tendrás que perder más tiempo para averiguar por qué se rompió.
Google me trajo aquí, incluso mi mensaje de error no se ajusta al 100%.
En mi caso la visit
comando de Capibara es desconocida ...
Error:
NoMethodError:
undefined method `visit'' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xa49a73c>
Como Capybara 2.0 uno tiene que usar las spec/features
carpeta, los comandos de capybara ya no funcionan en las spec/requests
carpeta.
Eso me ayudó: http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html
Espero que encuentres esto útil.
Las rutas con nombre deberían funcionar si coloca lo siguiente en rspec_helper.rb:
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers
...
end
¿Así es como se configura?
No creo que tenga acceso a rutas con nombre dentro de las especificaciones de su controlador rspec. Sin embargo, podría simplemente visitar (''/''), que es el equivalente de root_path.
Tuve el mismo problema, con el mismo Tutorial. Resulta que solo necesitaba reiniciar el servicio Spork y todo funcionó bien.
La solución publicada por Tom L funcionó para mí, pero cuando quité esa línea y reinicié Spork, eso también solucionó el problema.
¡Espero que ayude a otras personas que desconfían de desviarse del código del tutorial!
en rspec_helper.rb:
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers
...
end