2012-05-23 6 views
10

Ich bin ein Anfänger in Ruby und hatte diese Frage mich für eine lange Zeit nörgeln.Was genau ist das Stichwort "sollte" in RSpec Ruby

In einer RSpec-Datei, wenn wir Book.should <do something> schreiben, was ist das should Schlüsselwort? Ist es ein Mitglied des Buchobjekts? Wie kam es dazu, das Mitglied des Book-Objekts zu sein? Oder ist es ein Konstrukt von Ruby? Ist es eine Funktion? Wo kann ich die Definition finden, wenn es eine Funktion oder ein Mitglied ist?

+1

Diese Frage ist das Duplikat von http://stackoverflow.com/questions/3105755/ruby-metaprogramming-how-does-rspecs-should-work –

+0

Der Link erklärt nicht, was es tatsächlich tut. Was genau ist das Schlüsselwort "sollte"? – woodstok

+3

+1 für den Versuch, die Magie zu verstehen. –

Antwort

11

Nach dem Laden enthält RSpec a module in das Modul Kernel, das in allen Objekten enthalten ist, die Ruby bekannt sind. Somit kann die Methode soll für alle Objekte verfügbar gemacht werden. Als solches ist should kein Schlüsselwort (wie if, class oder end), sondern eine gewöhnliche Methode.

Beachten Sie, dass dieses Mixin nur in RSpec-Kontexten verfügbar ist, da es während des Ladens oder RSpec "gepatcht" wird.

+0

Das war, was ich gesucht habe. Danke – woodstok

3

Ich habe eine ähnliche Frage zu diesem here beantwortet. Grundsätzlich:

Was ich denke, Holger's Antwort könnte deutlicher machen, und was Sie zunächst verwirren könnte, ist, dass should die meisten üblichen Konventionen für Methodenbenennung bricht (nichts über die Methode beschreibt, was es tut, zum Beispiel) um den Code als Ganzes als eine Art Satz zu lesen.

Anstatt nur eine Reihe von Tests zu erstellen, versucht die Bibliothek, Sie zu ermutigen, Ihre Anwendung durch Tests auf eine Weise zu beschreiben, die einer lesbaren Spezifikation ähnelt.

+1

ok. Was sollte intern tun? – woodstok

+2

Erstellt eine Bestätigung, dass eine Bedingung wahr ist und als Teil Ihres Tests ausgeführt wird. Es ist also ähnlich zu sagen "assert x == y". – Russell