rspec和shoulda - 补充还是替代?

时间:2011-01-05 21:46:17

标签: ruby-on-rails ruby rspec shoulda

我已经使用了一段时间了,我已经阅读并使用了rspec。我还没有深入比较和对比。但在我看来,两者之间存在一些重叠,但它们不是1-1的替代品。

我正在考虑使用rspec在我的rails系统中编写一些单元测试,而不是替换所有用shoulda编写的现有测试。就像一种获得感觉的方式。

这是个好主意吗?我可以逐渐从一个移动到另一个,还是我在寻找麻烦?

我应该考虑一个明显的优势吗?

谢谢!

2 个答案:

答案 0 :(得分:13)

我不得不反对克里斯的回答,他们是替代品。我在我的Rails应用程序中一起使用Shoulda和Rspec,它们相互补充。

这个组合允许我为重复的事情(如关联和验证)编写简明的单行单元测试,以及为更复杂的规范提供完整的rspec套件。你可以在没有任何冲突的情况下获得两全其美。

查看Shoulda README,其中显示了如何在Rspec旁边安装。它甚至表示它提供了“Test :: Unit-和RSpec兼容的单行程序来测试常见的Rails功能。否则这些测试会更长,更复杂,更容易出错。”

编辑(示例):

在我的规范的顶部,我总是声明我的类关系和验证测试,它们简洁易读。

describe Component do

  context 'relationships' do
    it { should belong_to(:technology)}
    it { should have_many(:system_components) }
    it { should have_and_belong_to_many(:variables) }
    it { should have_many(:images).dependent(:destroy) }
    it { should have_many(:documents).dependent(:destroy) }
  end

  context 'validations' do
    it { should validate_presence_of(:make) }
    it { should validate_presence_of(:model) }
    it { should ensure_length_of(:name).is_at_most(100) }
    it { should validate_presence_of(:technology_id) }
  end
end

然后我的其他规范会有更复杂的测试,我使用来自Rspec的模拟和存根。

答案 1 :(得分:0)

rspec和shoulda是彼此的替代品。我也开始使用shoulda,然后转到rspec就像s/context/describe/s/should/it/一样简单,你就可以参加比赛了。 rspec有一堆技巧,各种集成和更复杂的匹配器,所以我自己现在使用它更多。

我最初的挫折之一是,几乎不可能找到一个不承担Rails和Cucumber的教程。不要过度思考 - 你可以用它来做很多事情,但是在使用之前你不必拥有解决方案的怪物。