J'ai le bloc de code suivant dans mon fichier rspec situé à la racine du dossier/spec.
require 'spec_helper'
describe "home" do
subject { page }
before(:each) { visit root_path }
describe "page" do
it { should have_title('My Page')}
end
end
Quand je le lance je reçois
undefined local variable or method `root_path'
Ce qui n'a aucun sens. Lorsque j'ai suivi le tutoriel Rails, une configuration similaire a très bien fonctionné. Quelqu'un peut-il m'aider?
MODIFIER:
Mes itinéraires incluent
root "static#home"
MODIFIER 2:
Rouvrir ce sujet. Déplacer ma déclaration racine vers le haut ne l'a pas corrigé.
MODIFIER 3:
Ce qui a fonctionné était d'inclure url_helpers dans ma configuration rspec. Je n'ai jamais eu à faire ça avant. quelqu'un peut-il expliquer pourquoi cela a fonctionné?
Les itinéraires nommés ne sont pas disponibles par défaut dans les spécifications. Ajoutez le code suivant à spec_helper.rb
:
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers
end
Dans votre routes.rb, voyez si vous avez défini root
. Quelque chose comme ça:
root :to => 'home#index'
Vous avez compris votre problème, bien que je veuille faire savoir aux autres qu'une autre raison pour laquelle ils peuvent recevoir le message d'erreur ...
NameError: undefined local variable or method `root_path'
... parce qu'ils renommé la route "root" :
Par exemple:
root to: 'pages#landing', as: :home
Cela va créer home_path
et home_url
en tant qu'assistants nommés dans votre application, tandis que root_path
et root_url
sera indéfini .
Comme mentionné par @emaillenin
, vous devrez inclure root to: "controller#action"
dans votre routes.rb
fichier
Cependant, vous devez vous assurer que cela est déclaré correctement - je l'ai déjà eu avant cela root_path
est introuvable, uniquement parce qu'il se trouve à la fin du routes.rb
fichier ou quelque chose
Il serait utile de montrer votre routes.rb
fichier