Проверьте, что данный селектор не содержит содержимого (т.е. пуст), используя Rspec

Я пытаюсь провалить интеграционный тест 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> вообще не содержит контента.


person Chris Bloom    schedule 21.05.2012    source источник


Ответы (1)


Вы говорите о том, чтобы убедиться, что нет дочерних тегов или текста посередине? Я не использую метод has_selector в RSpec. Я также не мог заставить его работать. Я просто использую Нокогири. Вы просто передаете визуализированный объект в Nokogiri::HTML(рендеринг) вот так и просто анализируете HTML для проверки. Это довольно просто.

Попробуйте.

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

Что-то подобное. Я не совсем уверен.

person Allen    schedule 07.06.2012
comment
Я хочу убедиться, что в теге section нет никакой разметки — ни контента, ни HTML. Можете ли вы привести пример шага с огурцом, в котором для этого используется Нокогири? Возможно, стоит попробовать, если Capybara не может сделать это изначально. - person Chris Bloom; 08.06.2012