1

我希望以下内容能够通过,但事实并非如此:

  specify do
    '<p class="qwe rty" id="qwerty"><strong><em><span>Para</span></em></strong>graph</p>'.should have_tag('p > strong > em') do
      without_tag('em')
    end
  end

结果:

 Failure/Error: without_tag('em')
   expected following:
   <em><span>Para</span></em>

我希望块检查的 HTML 是<span>Para</span>,但实际上它是<em><span>Para</span></em>. 为什么?这样,我似乎不可能确保 atag不包含任何其他tag相同类型:

  specify do
    '<div><div>bla</div></div>'.should have_tag('div') do
      without_tag('div')
    end
  end

这将失败,我看不出有任何方法可以让它按我想要的方式工作。我想我在这里误解了一些基本的东西......

非常感谢您的帮助。

更新

在浏览了一些其他项目的规范之后,这似乎是不可能的。例如,Formtastic 有很多这样的:

it 'should generate a label containing the input' do
  output_buffer.should_not have_tag('label.label')
  output_buffer.should have_tag('form li label', :count => 1)
  output_buffer.should have_tag('form li label[@for="post_allow_comments"]')
  output_buffer.should have_tag('form li label', /Allow comments/)
  output_buffer.should have_tag('form li label input[@type="checkbox"]', :count => 1)
  output_buffer.should have_tag('form li input[@type="hidden"]', :count => 1)
  output_buffer.should_not have_tag('form li label input[@type="hidden"]', :count => 1) # invalid HTML5
end

这肯定行得通,但对我来说,这是很多重复的地狱!在我看来,这样的事情会更可取:

it 'should generate a label containing the input' do
  output_buffer.should_not have_tag('label.label')
  output_buffer.should have_tag('form', :count => 1) do |form|
    form.should have_tag('li') do |li|
      li.should have_tag('label') do |label|
        label.should have_content(/Allow comments/)
        label.should have_tag('input[@type="checkbox"]', :count => 1)
        label.should_not have_tag('input[@type="hidden"]', :count => 1) # invalid HTML5
      end
      li.should have_tag('input[@type="hidden"]', :count => 1)
    end
  end
end

我想错了吗?经验是否表明,第一种方式更务实?至少,我的性能会更好,我猜......?对此有何看法?

4

0 回答 0