水豚:如何testing页面的标题?
在使用Steak,Capybara和RSpec的Rails 3应用程序中,如何testing页面的标题?
由于水豚2.1.0版在会话中有处理标题的方法。 你有
page.title page.has_title? "my title" page.has_no_title? "my not found title"
所以你可以testing标题,如:
expect(page).to have_title "my_title"
根据github.com/jnicklas/capybara/issues/863以下也使用水豚2.0 :
expect(first('title').native.text).to eq "my title"
这在Rails 3.1.10,Capybara 2.0.2和Rspec 2.12下工作,并允许匹配部分内容:
find('title').native.text.should have_content("Status of your account::")
你应该能够searchtitle
元素,以确保它包含你想要的文本:
page.should have_xpath("//title", :text => "My Title")
使用RSpec可以更简单地testing每个页面的标题。
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
我把这个添加到我的规范帮手:
class Capybara::Session def must_have_title(title="") find('title').native.text.must_have_content(title) end end
那我可以用:
it 'should have the right title' do page.must_have_title('Expected Title') end
为了使用Rspec和Capybara 2.1来testing页面的标题,你可以使用
-
expect(page).to have_title 'Title text'
另一个select是
-
expect(page).to have_css 'title', text: 'Title text', visible: false
由于Capybara 2.1的默认值是Capybara.ignore_hidden_elements = true
,而且由于标题元素是不可见的,所以您需要选项visible: false
以使search包含不可见的页面元素。
你只需要设置subject
page
,然后写一个页面的title
方法的期望:
subject{ page } its(:title){ should eq 'welcome to my website!' }
在上下文中:
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") }