ChatGPT解决这个技术问题 Extra ChatGPT

Difference between an it block and a specify block in RSpec

What is the difference between an it block and a specify block in RSpec?

subject { MovieList.add_new(10) }

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

They seem to do the same job. Just checking to be sure.


M
Michelle Tilley

The methods are the same; they are provided to make specs read in English nicer based on the body of your test. Consider these two:

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

You're correct, Brandon, it and specify are identical methods. You can see where they're defined here in the source.
Excellent catch! Amazing what you can find from reading the source. :) I'll update the answer.
Here is a gist with the examples methods names as of december 2013: gist.github.com/Dorian/7893586 (example, it, specify, focus, ...)
better rspec advise against the use of should, and in favor of expect
UPDATE to the excellent link from @Jordan: github.com/rspec/rspec-core/blob/master/lib/rspec/core/… is now the spot where to find it.