使用rspec验证页面标题

时间:2010-10-19 18:28:44

标签: ruby-on-rails rspec

我正在浏览Michael Hartl的Rails Tutorial

我正在尝试验证我的网页标题。测试看起来像这样:

it "should have the right title" do
      get 'home'
      response.should have_selector("title", :content => "Ruby on Rails Tutorial Sample App | Home")
    end

HTML head部分看起来像这样

<head>
    <title>Ruby on Rails Tutorial Sample App | Home</title>
</head>

我遇到了以下失败

  

1)PagesController GET'home'应该   拥有正确的头衔        失败/错误:response.should have_selector(“title”,:content =&gt;   “Ruby on Rails教程示例应用程序|   家”)        期望在输出之后包含Ruby on Rails   教程示例应用程序|家   标签:                #./spec/controllers/pages_controller_spec.rb:13:in   '阻止(3级)'

我期待这个过去。我究竟做错了什么?我正在使用Rails 3和RSpec 2.0.0

4 个答案:

答案 0 :(得分:4)

控制器规范通常不会呈现完整视图,因为它们旨在单独测试控制器。您可以通过在示例组的顶部包含指令integrate_views来告诉Rspec呈现整个页面:

describe MyController do
  integrate_views

但是你应该问问自己,你是否真的想要这样做,或者编写视图规范会更有意义。

顺便说一下,您还可以使用CSS3选择器语法来保存一些键击(可能需要包含Webrat匹配器):

response.should have_selector("title:contains('Ruby on Rails Tutorial Sample App | Home')")

修改

对于Rspec2,将integrate_views替换为render_views

答案 1 :(得分:2)

我发现移动到Capybara更容易(我使用的是Rails 3.0.1,Rspec 2.0.1,Ruby 1.9.2)。现在你可以做类似

的事情了
page.should have_css('title', :text => 'Ruby on Rails Tutorial Sample App | Home')

答案 2 :(得分:2)

这个问题看起来很旧,这解释了为什么现在有更好的方法。

以下对我有用:

it "has the correct page title", js: true do
  visit "/users/sign_in" # for example
  expect(page.title).to include "Sign In or Create a New Account"
end

答案 3 :(得分:0)

我强烈怀疑你某处有拼写错误。

截至目前,我正在完成第11章的练习4。我对教程的每一个问题都是我的错误。

注意:我不会剪切和粘贴。我正在手工编写所有代码。