Capybara::ElementNotFound, mais il est là
J'obtiens l'erreur suivante:
Capybara::ElementNotFound: Unable to find field "username"
./spec/controllers/sessions_controller_spec.rb:10:in `block (3 levels) in <top (required)>'
spec:
require 'spec_helper'
describe SessionsController do
before :each do
@user = FactoryGirl.create(:user)
end
context 'creating a new session' do
it 'can set the current_user variable to the logged user' do
visit '/login'
fill_in 'username', with: 'gabrielhilal' #I have tried `Username` as well
fill_in 'password', with: 'secret'
click_button 'Login'
current_user.should == @user
current_user.username.should == 'gabrielhilal'
end
end
context 'destroying existing session' do
xit 'can destroy the current_user' do
end
end
end
Mais j'ai le champ username
dans mon formulaire:
<form accept-charset="UTF-8" action="/sessions" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" / <input name="authenticity_token" type="hidden" value="x7ORLDIvq1BXr8SOkd/Zla9Pl5R5tBXAtyflCpTGCtY=" /></div>
<div class="field">
<label for="username">Username</label>
<input id="username" name="username" type="text" />
</div>
<div class="field">
<label for="password">Password</label>
<input id="password" name="password" type="password" />
</div>
<div class="actions">
<input name="commit" type="submit" value="Login" />
</div>
</form>
J'ai fait un test similaire avec cucumber
et c'est en passant, ce qui confirme que le champ username
est là: Quand passer du concombre à rspec dans la BDD cycle pour une procédure de connexion
Une idée?
MODIFIER - j'ai ajouté le save_and_open_page
, ce qui me donne une page blanche. Le puts "#{page.html.inspect}"
renvoie également empity.
""
Capybara::ElementNotFound: Unable to find field "username"
./spec/controllers/sessions_controller_spec.rb:12:in `block (3 levels) in <top (required)>'
Essayez d'utiliser save_and_open_page, avec launchy gem
Merci @hypee... j'ai ajouté le
Merci @hypee... j'ai ajouté le
save_and_open_page
et pour quelque raison que ma page est vide.OriginalL'auteur gabrielhilal | 2013-08-13
Vous devez vous connecter pour publier un commentaire.
Je sais que vous avez déjà répondu à votre propre question (un peu), mais je pense qu'il est encore garanti pour vous faire savoir que l'exemple que vous avez fournie est un mélange d'un contrôleur et d'une demande spec...
De citer mot à mot de RSpec - Contrôleur Spécifications:
Note: To encourage more isolated testing, views are not rendered by default in controller specs.
La principale différence (dans la voie RSpec interprète ce genre de spec il est) est la ligne:
describe SessionsController do
.Pour l'aligner avec RSpec et de Tester les meilleures pratiques:
spec/requests
describe "SessionsController" do
render_views
votre spec devrait fonctionner très bien...
Découvrez RSpec - Demande De Spécifications pour ce que je veux dire. Je voudrais aussi vérifier betterspecs.org de façons dont vous pouvez améliorer sur les tests.
OriginalL'auteur Adrian CB
Vous pouvez déboguer avec terminal comme:
Et voir si il y a 'username' entrée.
Mais je pense que le problème sur la première étape
visit '/login'
OriginalL'auteur Extazystas
J'ai réalisé que je dois indiquer explicitement à mon contrôleur de rendre les points de vue. Je l'ai trouvé dans le rspec readme, j'ai donc résoudre le problème en ajoutant
render_views
.OriginalL'auteur gabrielhilal