Używam rspec 2.6.0 i Capybara 1.1.1 do testów akceptacyjnych.
Mając tak:Kapibara i Rspec: poprawny sposób użycia w ramach() i have_selector() razem?
<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>
Chcę napisać test akceptacji, która stwierdza: „Zespół 3 nie ma linku«dezaktywować»” Spodziewam się, że poniższe zawiodą:
within('tr', :text => 'Team 3 Name') do |ref|
page.should_not have_selector('a', :text => 'Deactivate')
end
Ale mija. Aby dokładniej przetestować, co się dzieje, napisałem absurd:
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
Który również przechodzi.
Zakładam z tego, że zasięg wywołania have_selector() nie jest ograniczony przez blok within(), ale nie jestem pewien, dlaczego tak się dzieje. Dokumentacja kapibara wykorzystuje ten wzorzec i nie wspomina o żadnych gotchach. Jaki jest prawidłowy sposób użycia w celu ograniczenia zakresu mojego wyboru? Dziękuję. /Salernost
Czy można sprawdzić, aby zobaczyć, czy 'page' jest zerowa przez jakiś dziwny zbieg okoliczności, lub umieścić w debuggera linia na górze testu, abyś mógł dostać się do konsoli i wypisać wartość 'strony' lub dodać krok' I pokaż mi stronę', aby przeglądarka pokazała ci kopię strony w stanie, w którym się znajduje tuż przed uruchomieniem tego testu? Jeśli tak, jakie ramy testowe faktycznie widzą? – jefflunt
Dziękuję za odpowiedź. Mogę zweryfikować, że strona nie jest pusta przez wyjście debugowania, a ponadto, gdy wywołuję: "puts ref.text" wewnątrz bloku within(), otrzymuję poprawne: "Team 3 Name true Show Edit Deactivate". Zauważ, że mam poprawkę małpią wewnątrz(), aby uzyskać kontekst, abym mógł nazywać tekst na tym. Poprawiłem wewnątrz() PO Zidentyfikowaniu tego dziwnego zachowania, a więc nie jest przyczyną. :) – salernost
[Ten wątek] (https://groups.google.com/forum/?fromgroups#!topic/ruby-capybara/1sdsA7nubyE) może być interesujący. –