我正在浏览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
答案 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。我对教程的每一个问题都是我的错误。
注意:我不会剪切和粘贴。我正在手工编写所有代码。