RSpec中it块和指定块之间的区别


83

RSpec中的it块和指定块有什么区别?

subject { MovieList.add_new(10) }

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

他们似乎做同样的工作。只是检查以确保。

Answers:


110

方法是一样的; 提供它们是为了使规格更好地根据您的测试内容以英语阅读。考虑以下两个:

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

9
你是正确的,布兰登,it并且specify是相同的方法。您可以在源代码中看到它们的定义位置。
乔丹

1
极好的捕获!通过阅读源代码可以发现令人惊讶的东西。:)我将更新答案。
Michelle Tilley

2
这是一个摘要,带有截至2013年12月的示例方法名称:gist.github.com/Dorian/7893586(示例,示例,指定,重点...)
Dorian

4
更好的rspec建议不要使用shouldexpect
fotanus

4
更新至@Jordan中的出色链接:github.com/rspec/rspec-core/blob/master/lib/rspec/core/…现在是找到它的地方。
Florian Eck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.