2013-09-08 5 views
25

Was ist das korrekte Format für die Verwendung shoulda-matchers und RSpecs neue expect syntax?shofatimatchers RSpec erwarten Syntax

+0

Sorry, ich meinte shoulda – trev9065

+0

Im Hinblick auf die Abstimmung zu schließen auf der Grundlage dieser ist in erster Linie Meinung basiert, I wou Ich würde argumentieren, dass diese besondere Frage, ob etwas eine "gute Idee" ist, eine Ausnahme darstellt, weil es eine faktenbasierte Erklärung gibt, dass das Problem ein Nicht-Problem ist. –

+0

hat das Fragedetail bearbeitet, um es für SO geeignet zu machen. –

Antwort

55

Während man könnte sicherlich den shoulda-Matcher mit der neuen erwarten Syntax wie folgt:

it 'should validate presence of :email' do 
    expect(subject).to validate_presence_of :email 
end 

oder prägnantes aber weniger lesbar:

it { expect(subject).to validate_presence_of :email } 

die Einzeiler should Format dieser Üblicherweise werden Matcher mit verwendet, was explizit in 2.14 unterstützt wird, auch wenn config.syntax == :expect. Wenn should als mit einem impliziten Gegenstand verwendet:

describe User 
    it { should validate_presence_of :email } 
end 

es beruht nicht auf den Affen Patchen von Kernel dass should sonst abhängt.

Dies ist in https://github.com/rspec/rspec-expectations/blob/master/Should.md abgedeckt. In der Tat verwendet diese Dokumentation sogar das obige shoulda Matcher-Beispiel, um diese Ausnahme zu veranschaulichen.

Siehe auch Using implicit `subject` with `expect` in RSpec-2.11, in der eine Konfigurationsoption beschrieben wird, die Sie als Alternative zu it verwenden können.

expect_it { to validate_presence_of :email } 

Update: Ab RSpec 3.0 (Beta2), werden Sie auch nutzen können:

it { is_expected.to validate_presence_of :email } 
+0

Der erste Block würde auch von 'desribe User' umgeben sein, richtig? Es sieht aus wie ein Vergleich von 3 Zeilen zu 3 verschiedenen Zeilen, ist aber nicht ganz so. Wenn dies der Fall sein sollte, könnte dies zur Klarheit im ersten Codeblock hinzugefügt werden. –

+0

@MichaelDurrant Ja, würde es. Einverstanden. Danke, dass du darauf hingewiesen hast. Antwort aktualisiert –

+0

Hat jemand eine Idee, wofür der Downvote ist? Handelt es sich um die Schlussabstimmung dafür, dass dies "hauptsächlich auf der Meinung der Befragten" beruht? –

0

Ich werde die Antwort von @ Peter-alfvin suplement. Für den Fall, testen Sie das Modell und seine Migration selbst mit shoulda-matchers Sie nicht :expect außerhalb von it Block verwenden können, so schreiben kann:

RSpec.describe ModelName, type: :model do 
    expect(subject).to belong_to(:user) 
end 

Und Sie werden die expection erhalten:

`expect` is not available on an example group (e.g. a `describe` or `context` block). 

aber korrekte Version ist:

RSpec.describe ModelName, type: :model do 
    it { expect(subject).to belong_to(:user) } 
end 
Verwandte Themen