在RSpec中捕获并断言Meta标签

时间:2012-10-09 13:42:44

标签: ruby ruby-on-rails-3 rspec

我正在尝试编写一个单元测试来断言几个元标记值(在响应部分下)。如何使用属性标签检查单个值? 例如:

<meta property="keyword" content="site keywords" />
<meta property="description" content="site description" />

到目前为止,这就是我所得到的。但它失败了。

it "should check meta fields" do
  get :show, {:format => 'html' }
  r = response.body
  r.should have_selector('meta', :content => @site.title)
end

2 个答案:

答案 0 :(得分:4)

Capybara的have_selector匹配器选择:text,而非:content

r.should have_selector('meta', :text => @site.title)

请参阅github上的this discussionthis discussion

但是,这并不能解释您的规范失败的原因,因为:content选项会被忽略,如果更多许可,则应该进行测试。

此测试失败的最可能原因是它是从控制器规范调用的,在这种情况下响应将为空,因为rspec-rails prevents rails from actually rendering views。如果是这种情况,您需要将规范移至spec / requests /下的文件,或者在describe块内添加指令render_views

如果这不起作用,那么你必须提供有关规范上下文的更多信息,否则很难弄清楚出了什么问题。

答案 1 :(得分:0)

要断言 <meta> 标签:

have_selector 'meta[property=keyword][content="site keywords"]', visible: false

对于 <title> Capybara 有一个内置的匹配器:

have_title 'The title of my website'