Je suis assez nouveau pour Rails et j'essaie de suivre le railstutorial. Tout va bien, sauf pour mes tests qui ne peuvent pas dépasser les routes nommées (5.3.3)
My routes.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
Mes premiers tests (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
Le spec_helper.rb ressemble (sans toutes les choses commentées)
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
Les erreurs que je reçois de rspec sont toutes comme celle-ci:
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)>'
J'ai déjà essayé d'utiliser
include Rails.application.routes.url_helpers
dans le spec_helper, mais il a changé mes erreurs en
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
J'ai également essayé différentes façons de renommer mes itinéraires, mais aucun n'a fonctionné. Je reviens à la version tutoriel.
Si cela peut être utile pour trouver ce qui est exactement un problème, je suis sur Ubuntu 11.10, avec Rails 3.2.1 et Ruby 1.9.2p290 J'espère que vous pouvez m'aider, j'ai passé pas mal de temps à chercher une solution sur Google et je n'en ai pas trouvé ^^ '
Les routes nommées devraient fonctionner si vous mettez ce qui suit dans rspec_helper.rb:
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers
...
end
Est-ce ainsi que vous l'avez configuré?
dans rspec_helper.rb:
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers
...
end
Google m'a amené ici, même mon message d'erreur ne correspond pas à 100%.
Dans mon cas, la commande Capybara visit
est inconnue ...
Erreur:
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xa49a73c>
Depuis Capybara 2.0, il faut utiliser le dossier spec/features
Les commandes capybara ne fonctionnent pas dans le dossier spec/requests
plus.
Cela m'a aidé: http://alindeman.github.com/2012/11/11/rspec-Rails-and-capybara-2.0-what-you-need-to-know.html
J'espère que vous trouverez cela utile.
Je ne pense pas que vous ayez accès aux routes nommées à l'intérieur des spécifications de votre contrôleur rspec. Vous pouvez cependant simplement visiter ('/'), qui est l'équivalent de root_path.
J'ai eu le même problème, avec le même tutoriel. Il s'avère que je devais juste redémarrer le service Spork, et tout a bien fonctionné.
La solution publiée par Tom L a fonctionné pour moi, mais lorsque j'ai supprimé cette ligne et redémarré Spork, cela a également résolu le problème.
J'espère que cela aidera toutes les autres personnes qui hésitent à s'écarter du code du didacticiel!
Vous auriez dû utiliser
Rails generate rspec:install
au lieu de
rspec --init
et vous n'auriez pas eu à modifier le fichier de configuration.
Ne le faites pas maintenant cependant ou votre application va se casser et vous devrez perdre un peu plus de temps à comprendre pourquoi elle s'est cassée.
Les routes nommées devraient fonctionner si vous mettez ce qui suit dans Rails_helper.rb pas dans spec_helper.rb:
passer à mon code Rails_helper.rb
# This file is copied to spec/ when you run 'Rails generate rspec:install'
require 'spec_helper'
ENV['Rails_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
if Rails.env.production?
abort('The Rails environment is running in production mode!')
end
require 'rspec/Rails'
require 'capybara/Rails'
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers
config.include Devise::Test::ControllerHelpers, type: :controller
config.include Devise::Test::ControllerHelpers, type: :view
config.include Warden::Test::Helpers
end
begin
ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
puts e.to_s.strip
exit 1
end
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
# Filter lines from Rails gems in backtraces.
config.filter_Rails_from_backtrace!
end