哪个是使用rspec测试ActiveRecord验证的更好方法?为什么?

时间:2014-03-01 05:49:07

标签: ruby-on-rails testing activerecord rspec

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

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

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

1.使用thinkbot的应该是宝石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

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

1 个答案:

答案 0 :(得分:1)

第一个测试验证Post声明validates_presence_of :title,第二个测试验证 Post声明validates_presence_of :title时的,并且实例具有没有标题,实例无效。

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

另一方面,可以声称第一个测试依赖于实现细节(特定功能的使用),而第二个测试行为,因此 it < / em>更正确。

因此两个用例都有合理化。

我个人更喜欢第一个。

修改

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