Ich beginne gerade mit Feature-Spezifikationen mit RSpec (und Capybara). Ich teste mein ActiveAdmin-Dashboard und möchte überprüfen, ob alle Bereiche eine Auftragstabelle haben, wie in diesem Ausschnitt gezeigt:
%Vor% Ich habe den all
-Matcher in meinen Komponententests sehr oft verwendet, aber er scheint nicht zu funktionieren, wenn ich Capybaras have_css
-Matcher einpacke, weil ich den folgenden Fehler erhalte:
Stimmt meine Annahme, dass der integrierte all
-Matcher von RSpec auch mit anderen Matchern funktionieren sollte?
Hinweis: Ich verwende describe
und it
anstelle von feature
und scenario
in diesem Fall, weil ich Tests anstelle von Benutzerinteraktionsszenarien teste (siehe mein andere Frage ).
Leider besteht ein Konflikt zwischen RSpecs all
und Capybaras all
siehe Capybara Issue 1396 . Das all
, das du anrufst, ist tatsächlich Capybaras all
.
Lösung 1 - Rufen Sie BuiltIn :: Alle direkt
auf Die schnellste Lösung wäre, die all
-Methode von RSpec direkt aufzurufen (oder zumindest den Code, der ausgeführt wird.
Die Erwartung funktioniert, wenn Sie RSpec::Matchers::BuiltIn::All.new
anstelle von all
verwenden:
Lösung 2 - Definieren Sie alle
neu Aufruf der BuiltIn: Alles direkt liest nicht nett, also kann ärgerlich werden, wenn es häufig benutzt wird. Eine Alternative wäre, die Methode all
neu zu definieren, um die Methode all
von RSpec zu verwenden. Fügen Sie dazu das Modul und die Konfiguration hinzu:
Mit der Änderung verhält sich die all
in der folgenden Zeile wie die Methode all
von RSpec.
Wenn Sie Capybaras all
-Methode verwenden möchten, müssen Sie sie jetzt immer mit der Sitzung aufrufen (zB page
):
Ich habe eine sehr ähnliche Herangehensweise an die angenommene Antwort verwendet, aber in einer Cucumber-Umgebung bekam ich Fehler über RSpec.configure
, die nicht existierten. Außerdem wollte ich den Matcher etwas außer all
nennen, damit ich beide ohne Konflikte verwenden konnte. Dies ist, was ich mit
Jetzt kann ich Dinge tun wie:
%Vor%Tags und Links ruby-on-rails capybara rspec rspec-rails