Comment puis-je résoudre Manquant “l'hôte de lien! Veuillez fournir l' :paramètre host”? (RoR)
Je suis à la suite de la RoR Tutoriel et je suis coincé à la Liste 9.15
J'obtiens l'erreur suivante après l'exécution de 'bundle exec rspec spec/' :
1) Authentication authorization as wrong user submitting a PATCH request to the Users#update action
Failure/Error: specify { expect(response).to redirect_to(root_url) }
ArgumentError:
Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
# ./spec/features/authentication_pages_spec.rb:79:in `block (5 levels) in <top (required)>'
Mon test d'Authentification code est:
besoin d'un spec_helper.rb'
describe "Authentication", type: :request do
subject { page }
describe "signin page" do
before { visit signin_path }
it { should have_content('Sign in') }
it { should have_title('Sign in') }
end
describe "signin" do
before { visit signin_path }
describe "with invalid information" do
before { click_button "Sign in" }
it { should have_title('Sign in') }
it { should have_selector('div.alert.alert-error', text: 'Invalid') }
describe "after visiting another page" do
before { click_link "Home" }
it { should_not have_selector('div.alert.alert-error') }
end
end
describe "with valid information" do
let(:user) { FactoryGirl.create(:user) }
before { sign_in user }
#it { should have_title(user.name) }
it { should have_link('Profile', href: user_path(user)) }
it { should have_link('Settings', href: edit_user_path(user)) }
it { should have_link('Sign out', href: signout_path) }
it { should_not have_link('Sign in', href: signin_path) }
describe "followed by signout" do
before { click_link "Sign out" }
it { should have_link('Sign in') }
end
end
end
describe "authorization" do
describe "for non-signed-in users" do
let(:user) { FactoryGirl.create(:user) }
describe "in the Users controller" do
describe "visiting the edit page" do
before { visit edit_user_path(user) }
it { should have_title('Sign in') }
end
describe "submitting to the update action" do
before { patch user_path(user) }
specify { expect(response).to redirect_to(signin_path) }
end
end
end
describe "as wrong user" do
let(:user) { FactoryGirl.create(:user) }
let(:wrong_user) { FactoryGirl.create(:user, email: "[email protected]") }
before { sign_in user, no_capybara: true }
describe "visiting Users#edit page" do
before { visit edit_user_path(wrong_user) }
#it { should_not have_title(full_title('Edit user')) }
end
describe "submitting a PATCH request to the Users#update action" do
before { patch user_path(wrong_user) }
specify { expect(response).to redirect_to(root_url) }
end
end
end
end
Je ne sais pas comment résoudre ce problème de sorte que le test passe. Comment ne - je le résoudre? Quelqu'un pourrait-il expliquer ce qui ne va pas? (D'après le tutoriel, le test doit être de passage).
InformationsquelleAutor Sheldon | 2013-08-25
Vous devez vous connecter pour publier un commentaire.
Le problème peut être que vous n'avez pas défini de default_host pour l'environnement de test. Définir default_host à l'intérieur de config/environments/test.rb comme ceci:
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
à la fin detest.rb
. (Aprèsdo ... end
bloc)À la fin, j'ai juste utilisé:
au lieu de:
Vous avez pour définir la default_url dans chaque environnement(développement, test, production).
Vous avez besoin de faire ces changements.
Pour des tests comme le contrôleur de tests montré dans le cas des OP exemple, un autre paramètre est nécessaire pour résoudre cette erreur. Mentionné par Kesha Antonov vous pouvez à la place utiliser les Itinéraires default_url_options. En ajoutant le paramètre suivant sur la dernière ligne de votre config/environments/test.rb (après la fin), vos tests utilisation de l'hôte donné pour construire Url:
Comme mentionné par les OP dans une autre réponse, vous pouvez au lieu de passer à un Chemin Route Nommée lorsque l'erreur est à partir d'une URL route nommée.
Si vous souhaitez définir la valeur par défaut de l'hôte pour les expéditeurs, les aperçus, vous voulez que le action_mailer.default_url_options mentionné dans d'autres réponses.
Voir Générer des URLs dans le Action Mailer API docs pour plus d'informations sur le action_mailer réglage.
Vous pouvez éviter cette erreur à l'aide de la skip_confirmation! méthode.