0

我们目前主要使用 thinkbots shoulda gem来规范我们的 Rails 模型的功能。

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

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

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

class Blog < ActiveRecord::Base
  has_many :posts
end

确实有效。

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

4

1 回答 1

0

这种问题很容易演变成一场火焰战争,但无论如何,我会给我的两分钱。

我大部分时间都使用 shoulda 匹配器,我同意你的观点,这些测试起初可能看起来是多余的。那么我为什么要继续使用它们呢?

当您进行 BDD 时,您不是在测试单个单元,而是实际上在测试一个对象Behavior。在我看来,知道Blog实体响应posts具有 many 集合的方法posts是类行为的一部分Blog。所以我想测试一下。

此外,如果您严格遵循 TDD 循环,理论上您无法添加

has_many :posts

不违反先写测试的原则。

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

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

于 2017-06-21T12:46:55.837 回答