我认为shoulda真的很整洁,但我不明白为什么有些宏存在,例如:
should_validate_uniqueness_of :title
should_validate_presence_of :body, :message => /wtf/
should_validate_presence_of :title
should_validate_numericality_of :user_id
我对测试比较陌生,但这些服务的用途是什么?它们几乎是模型中发生的相同验证的精确镜像。例如,通过进入模型并编写validates_uniqueness_of :title
然后编写一个说should_validate_uniqueness_of :title
的测试,您究竟完成了什么?
答案 0 :(得分:1)
我没有使用shoulda
,我也不知道作者在想什么,但多年来我写了很多Ruby单元测试,所以我会猜测。
程序的某些部分可以纯粹以声明方式在RoR中声明,例如validate_uniqueness_of
。您编写其他更复杂的方法来实现。课程通常包括两者的组合。请注意,后者通常比前者花费更长的时间(空间和时间)。
因此,如果有兴趣草拟一个类的设计,也许是因为一个人对“TDD”感到兴奋,可能会编写一个测试,声明类需要支持的所有内容:标题是唯一的,用户ID是mersenne无论如何。这写起来快速而简单。然后就可以为所有这些编写代码,知道类的合同,并能够以简洁的形式看到它。
这只是猜测。
答案 1 :(得分:1)
对于那些想要完全防御性测试覆盖率的人来说,如果有人打破了应用程序的任何功能,那么测试就会失败。
答案 2 :(得分:-1)
这些是特定于RSpec&的宏。 ActiveRecord的。
是的,其实应该和RSpec一起玩。
http://robots.thoughtbot.com/post/159805987/speculating-with-shoulda