Ich verwende rspec 2.6.0 und Capybara 1.1.1 für Akzeptanztests.
Mit Blick wie folgt aus:Capybara und Rspec: richtiger Weg, um innerhalb() und have_selector() zusammen zu verwenden?
<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>
ich eine Abnahmeprüfung schreiben wollen, die besagt: „Team 3 auf den Link‚Deaktivieren‘nicht über“ Ich erwarte folgendes:
within('tr', :text => 'Team 3 Name') do |ref|
page.should_not have_selector('a', :text => 'Deactivate')
end
Aber es geht. Um weiter zu testen, was vor sich geht, habe ich das Absurde geschrieben:
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
Das geht auch.
Ich gehe davon aus, dass der Bereich, den der Aufruf have_selector() verwendet, nicht durch den Block iner() beschränkt ist, aber ich bin mir nicht sicher, warum das ist. Die Capybara-Dokumentation verwendet dieses Muster und scheint keine Probleme zu erwähnen. Was ist der richtige Weg, um den Umfang meiner Auswahl zu begrenzen? Danke. /Salernost
Haben Sie überprüft, ob 'page' Null durch einen seltsamen Zufall ist, oder in einem Debugger setzen Zeile an der Spitze des Tests, so dass Sie zu einer Konsole gelangen und den Wert von 'Seite' ausgeben können, oder den Schritt' Und zeigen Sie mir die Seite' hinzugefügt, so dass Ihr Browser Ihnen eine Kopie der Seite in dem Zustand zeigt, in dem sie sich befindet kurz bevor es diesen Test durchführt? Wenn ja, was sieht der Testrahmen eigentlich? – jefflunt
Danke für Ihre Antwort. Ich kann überprüfen, dass Seite nicht Null über Debug-Ausgabe ist, und noch mehr, wenn ich rufe: "puts ref.text" innerhalb der innerhalb() Block bekomme ich die richtige: "Team 3 Name wahr Show Edit deaktivieren". Beachten Sie, dass ich innerhalb von() monkey-patched habe, um den Kontext zu erhalten, damit ich Text darauf aufrufen kann. Ich habe gepatcht(), NACHDEM ich dieses seltsame Verhalten erkannt habe und deshalb nicht die Ursache ist. :) – salernost
[Dieses Thema] (https://groups.google.com/forum/?fromgroups#!topic/ruby-capybara/1sdsA7nubyE) könnte von Interesse sein. –