我希望以下内容能够通过,但事实并非如此:
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
我想错了吗?经验是否表明,第一种方式更务实?至少,我的性能会更好,我猜......?对此有何看法?