Я использую 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>
Я хочу написать приемочный тест, в котором говорится: «Команда 3 НЕ имеет ссылки «Деактивировать»». Я ожидаю, что следующее потерпит неудачу:
within('tr', :text => 'Team 3 Name') do |ref|
page.should_not have_selector('a', :text => 'Deactivate')
end
Но это проходит. Чтобы еще больше проверить, что происходит, я написал абсурд:
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
Что тоже проходит.
Исходя из этого, я предполагаю, что область действия, которую использует вызов have_selector(), не ограничена блоком inside(), но я не уверен, почему это так. Документация капибары использует этот шаблон и, похоже, не упоминает никаких ошибок. Каков правильный способ использования внутри, чтобы ограничить область моего выбора? Спасибо. /Salernost