Capybara и Rspec: правильно ли использовать совместно inside() и have_selector()?

Я использую 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

13
задан salernost 27 March 2012 в 21:41
поделиться