0

我认为 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什么?

4

3 回答 3

1

我没用过shoulda,也不知道作者到底在想什么,但是这些年来我写了很多 Ruby 单元测试,所以我来猜一猜。

程序的某些部分可以在 RoR 中纯粹以声明方式声明,例如validate_uniqueness_of. 其他的东西你写更复杂的方法来实现。一个类通常由这两者的组合组成。请注意,后者通常比前者花费更长的时间(在时间和空间上)。

因此,如果有人对草拟一个类的设计感兴趣,也许是因为对“TDD”感到兴奋,那么有人可能会编写一个测试来声明该类需要支持的所有内容:标题是唯一的,用户 ID 是梅森素数,随便什么. 这写起来又快又简单。然后一个人会去为所有这些编写代码,知道类的契约,并且能够以简洁的形式看到它。

这只是一个猜测。

于 2010-03-29T16:04:31.160 回答
1

它适用于想要完整的防御性测试覆盖的人,例如,如果有人破坏了应用程序的任何功能,测试就会失败。

于 2010-03-29T16:41:24.613 回答
-1

这些是特定于 RSpec 和 ActiveRecord 的宏。

是的,Shouda 实际上与 RSpec 一起玩。

http://robots.thoughtbot.com/post/159805987/speculating-with-shoulda

于 2010-03-29T16:10:50.397 回答