ruby Rspec和Shoulda -互补还是替代?

sz81bmfz  于 11个月前  发布在  Ruby
关注(0)|答案(2)|浏览(95)

我使用Shoulda有一段时间了,我也读过Rspec并玩过它。我没有做过深入的比较和对比。但在我看来,两者之间有一些重叠,但它们不是1-1的替代品。
我正在考虑用Rspec在我的Rails系统中编写一些单元测试,而不替换所有用Shoulda编写的现有测试。
这是一个好主意吗?我可以逐渐从一个转向另一个吗?还是我在自找麻烦?
我应该考虑的一个明显优于另一个的优点是什么?

hk8txs48

hk8txs481#

我不得不反驳Chris关于它们是替代品的回答。我在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的mock和stub。

iezvtpos

iezvtpos2#

rspec和shoulda是彼此的替代品。我也是从shoulda开始的,然后转移到rspec就像s/context/describe/s/should/it/一样简单,你就可以开始比赛了。rspec有一堆技巧,各种集成,和更复杂的匹配器,所以我自己这些天也在使用它。
我最初的一个挫折是,几乎不可能找到一个不假设Rails和Cucumber的教程。不要想太多-你可以用它做很多事情,但你不必在使用它之前就有一个怪物的解决方案。

相关问题