Frage

Die folgenden funktioniert gut:

Then /^I should see a button called "([^\"]*)"$/ do |name|
  response.should have_selector("li") do |li|
    li.should have_selector("a") do |a|
      a.should contain(name)
    end
  end
end

Jetzt muss ich es mit einem Schritt wie folgt ergänzen:

Then /^I should not see a button called "([^\"]*)"$/ do |name|
   [snip...]
end

Der Standard „Und ich soll nicht sehen“ ist nicht zufrieden stellend, da es überall die Zielphrase auf der Seite abholt - nicht nur innerhalb Tasten. Ich muß speziell überprüfen, dass keine Taste mit dem Zieltext vorhanden ist.

Mein erster Instinkt war zu versuchen, etwas wie folgt aus:

Then /^I should see a button called "([^\"]*)"$/ do |name|
  response.should have_selector("li") do |li|
    li.should have_selector("a") do |a|
      a.should_not contain(name)
    end
  end
end

Aber das ist natürlich so lange passieren wird, wie es irgendeine Taste auf der Seite, die nicht den Zieltext nicht enthalten, auch wenn es auch eine oder mehr Tasten, die den Zieltext tun umfassen.

Ihre Gedanken?

Vielen Dank,

Steven.

War es hilfreich?

Lösung 2

Problem gelöst! Ich habe jede eine Klasse von „Kontrolle“ zu steuern, dann schrieb dieser Schritt Definition:

Then /^I should not see a control called "([^\"]*)"$/ do |name|
  response.should have_selector("a.control", :content => name, :count
=> 0)
end

Natürlich ist dies setzt voraus, ich bin glücklich, indem sie ihnen eine ganze Klasse von "Kontrolle" ...

s.

Andere Tipps

Sie können mit assert_not_contain (und vielleicht not_contain aber ich bezweifle es, da es nicht in der rdoc ist ).

a.should assert_not_contain(name)

Sind Ihre Tasten eigentlich Links? Bei Schaltflächen (wo es einen einreichen Wert ist), benutze ich:

assert_have_selector "input[type=submit][value=\"#{text}\"]"

und

assert_have_no_selector "input[type=submit][value=\"#{text}\"]"

hth.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top