In a Rails 3 application using Steak, Capybara and RSpec how do I test the page\'s title?
I added this to my spec helper:
class Capybara::Session
def must_have_title(title="")
find('title').native.text.must_have_content(title)
end
end
Then I can just use:
it 'should have the right title' do
page.must_have_title('Expected Title')
end
In order to test for the title of a page with Rspec and Capybara 2.1 you could use
expect(page).to have_title 'Title text'
another option is
expect(page).to have_css 'title', text: 'Title text', visible: false
Since Capybara 2.1 the default is Capybara.ignore_hidden_elements = true
, and because the title element is invisible you need the option visible: false
for the search to include non visible page elements.
You just need to set the subject
to page
and then write an expectation for the page's title
method:
subject{ page }
its(:title){ should eq 'welcome to my website!' }
In context:
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
it { should have_selector "title", text: full_title("Your title here") }
Since the version 2.1.0 of capybara there are methods on the session to deal with the title. You have
page.title
page.has_title? "my title"
page.has_no_title? "my not found title"
So you can test the title like:
expect(page).to have_title "my_title"
According to github.com/jnicklas/capybara/issues/863 the following is also working with capybara 2.0:
expect(first('title').native.text).to eq "my title"
This works under Rails 3.1.10, Capybara 2.0.2 and Rspec 2.12, and allows matching partial contents:
find('title').native.text.should have_content("Status of your account::")