我使用rspec 2.6.0和Capybara 1.1.1进行验收测试.
有如下视图:
<tr >
<td>Team 3 Name</td>
<td>true</td>
<td><a href="/teams/3">Show</a></td>
<td><a href="/teams/3/edit">Edit</a></td>
<td><a href="/teams/3">Deactivate</a></td>
</tr>
<tr >
<td>Team 4 Name</td>
<td>true</td>
<td><a href="/teams/4">Show</a></td>
<td><a href="/teams/4/edit">Edit</a></td>
<td><a href="/teams/4">Deactivate</a></td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我想写一个验收测试,说明:"团队3没有'停用'链接." 我希望以下内容失败:
within('tr', :text => 'Team 3 Name') do |ref|
page.should_not have_selector('a', :text => 'Deactivate')
end
Run Code Online (Sandbox Code Playgroud)
但它过去了.为了进一步测试正在发生的事情,我写了荒谬的:
lock = false
within('tr', :text => 'Team 3 Name') do |ref|
page.should have_selector('a', :text => 'Deactivate')
page.should_not have_selector('a', :text => 'Deactivate')
lock = true
end
lock.should be_true
Run Code Online (Sandbox Code Playgroud)
哪个也通过了.
我假设has_selector()调用的作用域不受within()块的限制,但我不确定为什么会这样.水豚文档使用这种模式,似乎没有提到任何陷阱.在内部使用以限制我的选择范围的正确方法是什么?谢谢./ Salernost