Wie teste ich in einer Rails 3-Anwendung mit Steak, Capybara und RSpec den Titel der Seite?
Antworten:
Seit der Version 2.1.0 von Capybara gibt es in der Sitzung Methoden, um mit dem Titel umzugehen. Du hast
page.title
page.has_title? "my title"
page.has_no_title? "my not found title"
So können Sie den Titel wie folgt testen:
expect(page).to have_title "my_title"
Laut github.com/jnicklas/capybara/issues/863 funktioniert Folgendes auch mit Capybara 2.0 :
expect(first('title').native.text).to eq "my title"
Dies funktioniert unter Rails 3.1.10, Capybara 2.0.2 und Rspec 2.12 und ermöglicht den Abgleich von Teilinhalten:
find('title').native.text.should have_content("Status of your account::")
Sie sollten in der Lage sein, nach dem title
Element zu suchen , um sicherzustellen, dass es den gewünschten Text enthält:
page.should have_xpath("//title", :text => "My Title")
page.should have_content('<title>Your Title</title>')
Ich habe dies meinem Spezifikationshelfer hinzugefügt:
class Capybara::Session
def must_have_title(title="")
find('title').native.text.must_have_content(title)
end
end
Dann kann ich einfach verwenden:
it 'should have the right title' do
page.must_have_title('Expected Title')
end
Das Testen des Titels jeder Seite kann mit RSpec viel einfacher durchgeführt werden.
require 'spec_helper'
describe PagesController do
render_views
describe "GET 'home'" do
before(:each) do
get 'home'
@base_title = "Ruby on Rails"
end
it "should have the correct title " do
response.should have_selector("title",
:content => @base_title + " | Home")
end
end
end
Um den Titel einer Seite mit Rspec und Capybara 2.1 zu testen, können Sie verwenden
expect(page).to have_title 'Title text'
Eine andere Option ist
expect(page).to have_css 'title', text: 'Title text', visible: false
Seit Capybara 2.1 ist die Standardeinstellung Capybara.ignore_hidden_elements = true
und da das Titelelement unsichtbar ist, benötigen Sie die Option visible: false
für die Suche, um nicht sichtbare Seitenelemente einzuschließen.
Sie müssen nur die festlegen , subject
um page
dann für die Seite eine Erwartung schreiben title
Methode:
subject{ page }
its(:title){ should eq 'welcome to my website!' }
Im Zusammenhang:
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