Wie schreibe ich eine Capybara-Behauptung, die prüft, ob eine Schaltfläche vorhanden ist und ob sie aktiviert oder deaktiviert ist?
Ich habe eine App, die Schaltflächen als Reaktion auf Ereignisse in der Benutzeroberfläche aktiviert / deaktiviert.
Ich kann Capybara einfach verwenden, um festzustellen, ob eine Schaltfläche vorhanden ist
should have_button 'save'
Ich habe jedoch keine Ahnung, wie der Status der Schaltfläche "Speichern" überprüft werden soll. Das ist:
Wie schreibe ich eine Capybara-Behauptung, die das Vorhandensein einer Schaltfläche überprüftund seinen aktivierten oder deaktivierten Zustand?
Ich habe einen Check für einen deaktivierten Button gehackt. Ich nehme an, dass ich für enabled überprüfen konnte, ob es eine passende Schaltfläche gibt und keine passende deaktivierte Schaltfläche. Aber das ist, gelinde gesagt, klobig.
Dies scheint eine so grundlegende Überprüfung der Benutzeroberfläche zu sein, dass ich mir sicher bin, dass ich etwas verpasst habe, aber ich kann nicht herausfinden, was.
Follow-up basierend auf der Antwort von gregates:
Wie ich in dem Kommentar erwähnte, hängt das Verhalten von Capybara von dem zugrunde liegenden Treiber ab. Wir verwenden ein Webkit, das "true" / "false" -Stringergebnisse zurückgibt. Anscheinend geben andere Treiber true / false zurück. Die Leute bei Capybara sind sich des Problems bewusst (github.com/jnicklas/capybara/issues/705), aber sie glauben (wahrscheinlich richtig), dass es nicht wirklich ihr Problem ist, das sie lösen müssen.
Anstatt dass meine Tests vom verwendeten Treiber abhängen, habe ich einen benutzerdefinierten Matcher erstellt:
RSpec::Matchers.define :be_enabled do
match do |actual|
driver_result = actual[:disabled]
# nil, false, or "false" will all satisfy this matcher
(driver_result.nil? || driver_result == false || driver_result == "false").should be_true
end
end
RSpec::Matchers.define :be_disabled do
match do |actual|
driver_result = actual[:disabled]
(driver_result == "disabled" || driver_result == true || driver_result == "true").should be_true
end
end
Dann können Sie Folgendes eingeben:
user_license_area.find_button('Save').should be_disabled