应该用shoulda吗?

Shoulda use shoulda?

我们目前使用思想机器人 shoulda gem 主要是为了规范我们 rails 模型的功能。

似乎 shoulda 提供的许多匹配器实际上正在测试 rails 行为。例如

describe Blog do
  it { should have_many(:posts) }
end

只是测试模型定义中的这段代码

class Blog < ActiveRecord::Base
  has_many :posts
end

确实有效。

这不是在测试 rails 行为(与我们模型的行为相反)吗? 这不是通常要避免的事情吗?

这种问题很容易引火烧身war,但无论如何,我还是给两分吧

大多数时候我确实使用 shoulda 匹配器,我同意你的看法,这些测试一开始看起来可能是多余的。那我为什么要继续使用它们呢?

当您进行 BDD 时,您并不是在测试单个单元,而是在实际测试一个对象 行为。在我看来,知道 Blog 实体使用许多 posts 的集合响应 posts 方法是 Blog [=33= 行为的一部分].所以我想测试一下。

另外,如果严格按照TDD周期,理论上是不能添加

has_many :posts

行不违背先写测试的原则

与许多其他领域一样,最终答案取决于项目。如果您有一个包含许多模型的大型项目(或者一个正在成长为这样的项目),您可能真的想要测试接口。

如果您只有 Post 模型和 Author,它可能看起来有点矫枉过正。但在这种情况下,它会花费你大约 4 行测试...那么为什么不呢?