【问题标题】:Which is a better way to test validations of ActiveRecord using rspec?And why?哪个是使用 rspec 测试 ActiveRecord 验证的更好方法?为什么?
【发布时间】:2014-03-01 05:49:06
【问题描述】:

我要测试一个模型,像这样;

class Post < ActiveRecord::Base
  validates_presence_of :title
  # ...
end

我找到了两种主要的方法来测试验证:

1.使用thinkbot的should gem https://github.com/thoughtbot/shoulda

describe Post do
  it { should validate_presence_of(:title) }
end

2.直接测试验证,就像书中的方法

describe Post do
  it "must has title" do
    post = Post.create
    expect(post).not_to be_valid
end

所以我想知道哪种方法更好,为什么。提前致谢。

【问题讨论】:

    标签: ruby-on-rails testing activerecord rspec


    【解决方案1】:

    第一个测试验证Post声明validates_presence_of :title,第二个测试验证Post声明validates_presence_of :title,并且实例没有标题,该实例将不会被有效。

    一方面,由于validates_presence_of的内部不需要测试,所以更正确的测试应该是第一个。

    另一方面,可以说第一个测试依赖于实现细节(特定功能的使用),而第二个测试行为,所以 it 更正确。

    所以这两个用例都有合理化。

    我个人更喜欢第一个。

    编辑

    我在shoulda 实现中进行了一些研究,它实际上通过为实例设置nil 值来进行测试,并检查它是否有正确的错误,所以实际上,它确实 检查行为。在这种情况下,你绝对应该使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2016-09-03
      相关资源
      最近更新 更多