使用Rspec测试给定选择器不包含任何内容(即为空)

时间:2012-05-21 20:59:12

标签: rspec integration-testing webrat

我试图让RSpec集成测试失败。

给出以下HTML片段:

<article id="content">  
  <section>    
    <p>There aren't any travel promotions... yet!</p>
  </section>
</article>

当我运行以下Rspec测试时:

describe SomeController do
  render_views

  describe "GET 'promotion_index'" do
    it "should display an empty page given a blank page fragment and no promotions " do
      get :promotion_index
      response.should have_selector("#content section:first-of-type", :content => "")
    end
  end
end

然后测试失败

但事实并非如此。无论选择器中是否有内容,它都能很好地传递。

为了清楚起见,我不想测试<p>内容不存在。我想测试<article id="content"><section /></article>根本不包含任何内容。

1 个答案:

答案 0 :(得分:0)

您是在谈论确保没有子标签或中间没有文字?我不使用RSpec的have_selector方法。我也无法让它上​​班。我只是使用Nokogiri。您只需将渲染对象传入Nokogiri :: HTML(渲染),然后解析HTML即可进行测试。这很简单。

试一试。

html = Nokogiri::HTML(rendered)
html.xpath("//[@id='content']/section").each do |node|
 node.children_should be_empty?
end

这样的事情。我不太确定。