rspec - rails - ruby capybara github
problema rails3 rspec (7)
Estoy probando rails3. Estoy usando el sitio railstutorial para explorar más sobre rails3; el tutorial es muy bueno para empezar (tengo una experiencia mínima con rails2).
Tengo un problema con rspec que actualmente bloquea mi progreso. Vi que el tutorial recomendaba usar rspec2.0.0.beta.18 gem; En su lugar, instalé la gema rspec2.0.0.beta.20 usando
bundle install
Sin embargo, encuentro problemas con esta versión de rspec My rspec for integration_test se ve así:
describe "LayoutLinks" do
it "should have a About page at ''/about''" do
get ''/about''
response.should have_selector(''h1'', :content => "About Us")
end
end
La falla se ve así:
Failures:
1) LayoutLinks should have a About page at ''/about''
Failure/Error: Unable to find matching line from backtrace
stack level too deep
# /home/arun/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/forwardable.rb:185
(NOTA: Quienes hayan analizado el Capítulo 5 no tendrán problemas para entender el contexto).
Si cambio la versión de rspec a 2.0.0.beta.18 en el Gemfile y ejecuto rspec obtengo el siguiente error
arun@ubuntu-world:~/Project/Rails/rails3/sample_app$ rspec spec/
/home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/runtime.rb:27:in `block in setup'': You have already activated rspec-core 2.0.0.beta.20, but your Gemfile requires rspec-core 2.0.0.beta.18. Consider using bundle exec. (Gem::LoadError)
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `block in each''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `each''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `each''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/runtime.rb:17:in `setup''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler.rb:100:in `setup''
from /home/arun/Project/Rails/rails3/sample_app/config/boot.rb:8:in `<top (required)>''
from <internal:lib/rubygems/custom_require>:29:in `require''
from <internal:lib/rubygems/custom_require>:29:in `require''
from /home/arun/Project/Rails/rails3/sample_app/config/application.rb:1:in `<top (required)>''
from <internal:lib/rubygems/custom_require>:29:in `require''
from <internal:lib/rubygems/custom_require>:29:in `require''
from /home/arun/Project/Rails/rails3/sample_app/config/environment.rb:2:in `<top (required)>''
from <internal:lib/rubygems/custom_require>:29:in `require''
from <internal:lib/rubygems/custom_require>:29:in `require''
from /home/arun/Project/Rails/rails3/sample_app/spec/spec_helper.rb:3:in `<top (required)>''
from <internal:lib/rubygems/custom_require>:29:in `require''
from <internal:lib/rubygems/custom_require>:29:in `require''
from /home/arun/Project/Rails/rails3/sample_app/spec/requests/layout_links_spec.rb:1:in `<top (required)>''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/configuration.rb:302:in `load''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/configuration.rb:302:in `block in load_spec_files''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/configuration.rb:302:in `map''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/configuration.rb:302:in `load_spec_files''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/command_line.rb:18:in `run''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/runner.rb:46:in `run_in_process''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/runner.rb:37:in `run''
from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/runner.rb:10:in `block in autorun''
El segundo error debe solucionarse al volver a ejecutar la bundle install
siempre que cambie su Gemfile.
En cuanto al primer error, ¿podría publicar las líneas de su archivo routes.rb donde define la ruta ''/ about''?
Volví a ejecutar "paquete de instalación" y cuando miro Gemfile y Gemfile.lock encuentro las gemas apropiadas agrupadas si utilizo 2.0.0.beta.18 o 2.0.0.beta.20.
routes.rb maps / about a alguna acción específica que pertenece a un controlador específico. También obtengo la página correcta cuando visito la página en mi navegador; así que no creo que ese sea el problema. (Desafortunadamente no tengo el código ahora mismo y no puedo pegarlo aquí)
El siguiente es el error que no puedo entender
arun@ubuntu-world:~/Project/Rails/rails3/sample_app$ rspec spec/
/home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/runtime.rb:27:in `block in setup'': You have already activated rspec-core 2.0.0.beta.20, but your Gemfile requires rspec-core 2.0.0.beta.18. Consider using bundle exec. (Gem::LoadError)
Sé lo que es el ejecutor de paquetes , y mucho menos cómo usarlo ...
- Arun
Debes eliminar una de las gemas usando gem uninstall:
$ gem uninstall rspec-core -v 2.0.0.beta.20
También puede usar la lista de gemas para ver las versiones de las gemas que ha instalado.
Rspec había estado funcionando bien durante 11 capítulos del tutorial de Hartl. Pero de alguna manera me metí con mi gemfille y comencé a tener el mismo problema con rspec "niveles de pila demasiado profundos" y no ser capaz de resolverlo mediante una "instalación de paquetes". Así que me volví loco e hice un
windows> gem uninstall rspec rspec-rails rspec-expectations rspec-mock rspec-core
(Todas las versiones). La ''lista de gemas'' demostró que en verdad se habían ido. Luego ejecuté un
> bundle install
...
Using rspec-core (2.0.0.beta.22)
Using rspec-expectations (2.0.0.beta.22)
Using rspec-mocks (2.0.0.beta.22)
Using rspec (2.0.0.beta.22)
Using rspec-rails (2.0.0.beta.22)
...
Que es lo que está en mi Gemfile. Sin embargo, una ''lista de gemas -d rspec'' todavía muestra las gemas -no-rspec o rspec-xxx instaladas y los problemas de rspec-core ...
> rails g rspec:install *#for good measure*
...
> rspec -v
C:/Ruby192/lib/ruby/1.9.1/rubygems.rb:762:in `report_activate_error'': Could not
find RubyGem rspec-core (>= 0) (Gem::LoadError)
Pero ''lista de paquetes'' dice que está instalado. Entonces, ¿cómo hago que rspec trabaje de nuevo?
ACTUALIZAR
Arreglé el problema, pero primero me disculpo con arun kumar por acampar en su pregunta y me interpuso una respuesta. Pensé que mi problema era similar y que mi "respuesta" se ubicaría al final.
Antes que nada, tenía que hacer una
> gem install rspec -v 2.0.0.beta.22
> gem install rspec-rails -v 2.0.0.beta.22
en lugar de esperar que bundler lo haga. bundler no parece confiable aquí. Esto hizo que mis llamadas a rspec volvieran a funcionar, pero todavía tenía que lidiar con "niveles de pila demasiado profundos". Eso se solucionó al actualizar rspec y rspec-rails a 2.0.1 (de David Chelimski: http://www.ruby-forum.com/topic/282245 ). Nuevamente, cambiar mi Gemfile y llamar a bundle-install no funcionó. Tuve que desinstalar las cinco gemas rspec-xxx como las de arriba y hacer manualmente
> gem install rspec -v 2.0.1
> gem install rspec-rails -v 2.0.1
tal vez no necesité desinstalar primero, pero lo hice. Es probable que el póster ya haya resuelto su problema, ya que fue hace mucho tiempo, pero esta es mi solución que puede funcionar para otros, recuerde que tengo Windows Vista64.
Estoy teniendo el mismo problema. Al final del Capítulo 5 , las pruebas de /spec/requests/layout_links_spec.rb fallan con el mismo error (las pruebas de controlador funcionan bien):
Failure/Error: Unable to find matching line from backtrace
stack level too deep
# C:/Ruby192/lib/ruby/1.9.1/forwardable.rb:185
Después de solucionar un poco el archivo /spec/requests/layout_links_spec.rb , parece que usar la response
dentro de este contexto es lo que desencadena el problema. Por ejemplo, no hay ningún error si el archivo dice lo siguiente:
require ''spec_helper''
describe "LayoutLinks" do
it "should run tests properly from this file" do
get ''/''
end
end
Pero el archivo como copiado del tutorial dice:
require ''spec_helper''
describe "LayoutLinks" do
it "should have a Home page at ''/''" do
get ''/''
response.should have_selector(''title'', :content => "Home")
end
it "should have a Contact page at ''/contact''" do
get ''/contact''
response.should have_selector(''title'', :content => "Contact")
end
it "should have an About page at ''/about''" do
get ''/about''
response.should have_selector(''title'', :content => "About")
end
it "should have a Help page at ''/help''" do
get ''/help''
response.should have_selector(''title'', :content => "Help")
end
end
El error se produce tan pronto como se response
Esto es en Windows 7 (he intentado configurar Ruby, Git, Vim y otras herramientas de desarrollo a nivel de sistema en lugar de dentro de Cygwin).
Rspeicher: siguiendo los pasos de RailsTutorial.org, el archivo /config/routes.rb se ve así:
SampleApp::Application.routes.draw do
get "users/new"
match ''/signup'', :to => ''users#new''
match ''/contact'', :to => ''pages#contact''
match ''/about'', :to => ''pages#about''
match ''/help'', :to => ''pages#help''
root :to => ''pages#home''
end
como dice Arun, todo esto funciona según lo previsto en el navegador, por lo que el problema parece estar en algún lugar dentro de rspec o ruby. Supongo que esto no es un problema si ruby se instala bajo Cygwin. Esperaba no tener que volver a un entorno Cygwin puro, especialmente porque mis archivos webroot y project ya están administrados fuera de la estructura de carpetas virtuales de Cygwin.
Definitivamente no tiene nada que ver con Windows o cualquier entorno que tengas allí. Estoy experimentando lo mismo con mi Mac.
mi archivo routes.rb
(del mismo tutorial) se ve así:
SampleApp::Application.routes.draw do
resources :users
match ''/signup'', :to => ''users#new''
match ''/contact'', :to => ''pages#contact''
match ''/about'', :to => ''pages#about''
match ''/help'', :to => ''pages#help''
end
También podrías intentar ejecutar
bundle exec rake db:test:prepare