web-dev-qa-db-fra.com

Capybara: Comment tester le titre d'une page?

Dans une application Rails 3 utilisant Steak, Capybara et RSpec, comment puis-je tester le titre de la page?

68
Nerian

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"
101
Lars Schirrmeister

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::")
14
jpwynn

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")
13
Dylan Markow

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
3
Jake

Afin de tester le titre d'une page avec Rspec et Capybara 2.1, vous pouvez utiliser

  1. expect(page).to have_title 'Title text'

    une autre option est

  2. 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.

2
Aristotelis_Ch

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
0
Starkers