0

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>コンテンツがまったく含まれていないことをテストしたい。

4

1 に答える 1

0

子タグがないこと、または途中にテキストがないことを確認することについて話しているのですか? RSpec の have_selector メソッドは使用しません。私もそれを機能させることができませんでした。のこぎりをそのまま使っています。このようにレンダリングされたオブジェクトを Nokogiri::HTML(rendered) に渡し、HTML を解析してテストするだけです。とても簡単です。

試してみる。

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

そんな感じ。よくわかりません。

于 2012-06-07T23:59:12.177 に答える