【问题标题】:Shoulda use shoulda?应该使用应该吗?
【发布时间】:2017-06-21 10:52:03
【问题描述】:

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

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

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

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

class Blog < ActiveRecord::Base
  has_many :posts
end

确实有效。

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

【问题讨论】:

  • 成像posts 在您的应用程序某处使用,有人删除了has_many :posts,未经测试您不会知道有问题,直到您的应用程序崩溃。

标签: ruby-on-rails shoulda thoughtbot


【解决方案1】:

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

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

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

另外,如果严格按照TDD循环,理论上是不能加的

has_many :posts

不违反先写测试的原则。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2011-12-03
    • 2021-12-10
    • 2018-09-05
    • 2010-12-25
    • 2014-05-27
    • 2010-12-25
    • 2018-09-11
    相关资源
    最近更新 更多