Dans une application Rails 3 utilisant Steak, Capybara et RSpec, comment puis-je tester le titre de la page?
Depuis la version 2.1.0 de capybara, il existe des méthodes sur la session pour gérer le titre. Vous avez
page.title
page.has_title? "my title"
page.has_no_title? "my not found title"
Vous pouvez donc tester le titre comme:
expect(page).to have_title "my_title"
Selon github.com/jnicklas/capybara/issues/86 ce qui suit fonctionne également avec capybara 2.0 :
expect(first('title').native.text).to eq "my title"
Cela fonctionne sous Rails 3.1.10, Capybara 2.0.2 et Rspec 2.12, et permet de faire correspondre le contenu partiel:
find('title').native.text.should have_content("Status of your account::")
Vous devriez pouvoir rechercher l'élément title
pour vous assurer qu'il contient le texte que vous souhaitez:
page.should have_xpath("//title", :text => "My Title")
J'ai ajouté ceci à mon assistant de spécifications:
class Capybara::Session
def must_have_title(title="")
find('title').native.text.must_have_content(title)
end
end
Ensuite, je peux simplement utiliser:
it 'should have the right title' do
page.must_have_title('Expected Title')
end
Afin de tester le titre d'une page avec Rspec et Capybara 2.1, vous pouvez utiliser
expect(page).to have_title 'Title text'
une autre option est
expect(page).to have_css 'title', text: 'Title text', visible: false
Depuis Capybara 2.1, la valeur par défaut est Capybara.ignore_hidden_elements = true
, et parce que l'élément title est invisible, vous avez besoin de l'option visible: false
pour que la recherche inclue des éléments de page non visibles.
Il vous suffit de définir subject
sur page
, puis d'écrire une attente pour la méthode title
de la page:
subject{ page }
its(:title){ should eq 'welcome to my website!' }
Dans le contexte:
require 'spec_helper'
describe 'static welcome pages' do
subject { page }
describe 'visit /welcome' do
before { visit '/welcome' }
its(:title){ should eq 'welcome to my website!'}
end
end