Dies sollte eine einfache Antwort haben, aber ich habe Mühe, es zu finden (RSpec Dokumentation, EverydayRails Testing mit RSpec, Google-Ergebnisse überprüft). In meinem Modell Spezifikationen wie ich specs Grund Attribute umfassen wie folgt:RSpec 'Expect' Syntax und Idiomatic Attributesp
describe Foo do
describe "basic attributes" do
before { @foo = create(:foo) }
subject { @foo }
it { should be_valid }
it { should respond_to(:color) }
it { should respond_to(:height) }
it { should respond_to(:some_other_attribute) }
it { should respond_to(:you_get_the_idea) }
...
ich diese Spezifikationen mag, weil, wenn es irgendeine Art von Fehler in meiner Fabrik und/oder das Modell dieser Angaben helfen Sie mir, es schnell zu lokalisieren.
Ich habe die expect
Syntax in alle anderen Spezifikationen eingebaut und ich mag, wie es liest, aber wie man es hier benutzt? Eine Option könnte
expect(@foo).to respond_to(:color)
sein und ein anderer könnte
expect(it).to respond_to(:color)
Erstere sein beinhaltet Vervielfältigung, die mit der should
Syntax vermieden wird, aber letztere sieht seltsam mir (was nur ich sein könnte).
Ich weiß, dass diese Frage mehr über Stil als Funktionalität * ist, aber wir Ruby-Entwickler sind gewissenhaft in Bezug auf Stil, und ich möchte mich an Standardpraktiken halten und lesbaren, idiomatischen Code haben. Jede Hilfe wird geschätzt. Vielen Dank.
UPDATE: Keine meiner vorgeschlagenen Optionen funktioniert übrigens. Beide werfen undefined method 'expect'
Fehler. Jetzt bin ich wirklich verwirrt!
Nachdem ich über den Fehler nachgedacht habe, merke ich, dass es ist, weil die should
Spezifikationen oben innerhalb des einzeiligen Blockes sind. Die Verwirrung, wie kann ich dann einen einzeiligen Block mit der Expect-Syntax schreiben? Angesichts dieses Updates geht es in erster Linie um Funktionalität und ich bin gespannt darauf, die Gedanken anderer zu hören.
4/2015 UPDATE
rspec > 3.0
hat noch einen anderen Weg, um diese zu handhaben, hinzugefügt und es klingt wie rspec ~> 4.0
mit der should
Syntax entfernt tun. Per Myron Masters:
Einige Benutzer haben sich darüber geärgert, wie sich dies auf die Expect-Syntax bezieht und ob Sie sie weiterhin verwenden können. Es wird auch weiterhin in RSpec 3 (wieder, unabhängig von Ihrer Syntax-Konfiguration) zur Verfügung stehen, aber wir haben auch hinzugefügt eine alternative API, die ein bisschen mehr im Einklang mit der erwarten ist Syntax:
describe Post do
it { is_expected.to allow_mass_assignment_of(:title) }
end
is_expected ist sehr einfach definiert als expect (subject) und unterstützt auch negative Erwartungen über is_expected.not_to matcher. [...]
In RSpec 3 haben wir die Soll-Syntax beibehalten und sind standardmäßig verfügbar. Sie erhalten jedoch eine Verwarnungswarnung, wenn Sie sie verwenden, ohne sie explizit zu aktivieren. Dies wird den Weg dafür bereiten, dass es standardmäßig in RSpec 4 deaktiviert wird (oder möglicherweise in ein separates Juwel extrahiert wird), während die Verwirrung für Neulinge, die über ein altes Tutorial zu RSpec kommen, minimiert wird.
Können Sie eine Ihrer Spezifikationen mit der Expect-Syntax teilen? – Sun
Diese sind ziemlich einfach und sind in den RSpec-Dokumenten sowie in anderen Quellen. Hier ist ein großartiger Blogbeitrag über die Syntax: http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax. Meine Beispiele sehen im Wesentlichen so aus, aber sie sind in Blöcken (d. H. "Es tut etwas") ... – aceofbassgreg