Unterschied zwischen einem it-Block und einem spec-Block in RSpec

83

Was ist der Unterschied zwischen einem it-Block und einem spec-Block in RSpec?

subject { MovieList.add_new(10) }

specify { subject.should have(10).items }
it { subject.track_number.should == 10}

Sie scheinen den gleichen Job zu machen. Ich überprüfe nur, um sicher zu sein.

Basheps
quelle

Antworten:

110

Die Methoden sind die gleichen ; Sie werden bereitgestellt, um das Lesen von Spezifikationen auf Englisch basierend auf Ihrem Testkörper zu verbessern. Betrachten Sie diese beiden:

describe Array do
  describe "with 3 items" do
    before { @arr = [1, 2, 3] }

    specify { @arr.should_not be_empty }
    specify { @arr.count.should eq(3) }
  end
end

describe Array do
  describe "with 3 items" do
    subject { [1, 2, 3] }

    it { should_not be_empty }
    its(:count) { should eq(3) }
  end
end
Michelle Tilley
quelle
8
Sie haben Recht, Brandon, itund specifysind identische Methoden. Sie können hier in der Quelle sehen, wo sie definiert sind .
Jordan läuft
1
Hervorragender Fang! Erstaunlich, was Sie beim Lesen der Quelle finden können. :) Ich werde die Antwort aktualisieren.
Michelle Tilley
2
Hier ist ein Kern mit den Beispielmethoden Namen ab Dezember 2013: gist.github.com/Dorian/7893586 (Beispiel, es, spezifizieren, konzentrieren, ...)
Dorian
4
Besser rspec raten von der Verwendung von shouldund zugunsten vonexpect
fotanus
4
UPDATE zu dem ausgezeichneten Link von @Jordan: github.com/rspec/rspec-core/blob/master/lib/rspec/core/… ist jetzt der Ort, an dem Sie ihn finden können.
Florian Eck