什么是存根,以便测试ActiveRecord validates_uniqueness_of

时间:2014-03-06 10:57:27

标签: ruby-on-rails validation unit-testing activerecord

我有一个简化的模型:

class Site < ActiveRecord::Base
  validates :primary_domain, uniqueness: true
end

我在minitest-spec中进行了测试:

describe "primary_domain" do
  it "must be unique" do
    Site.create(primary_domain: "example.com")
    s = Site.new(primary_domain: "example.com")
    s.wont_be valid?
    s.errors.messages.keys.must_include :primary_domain
  end
end

但这需要几次往返数据库,我发现它打破了单元测试的概念。我可以存根以排除整个数据库层吗?

E.g。使用mocha时:

describe "primary_domain" do
  it "must be unique" do
    Site.stubs(:find_by).with(primary_domain: "example.com").returns([Site.new])
    s = Site.new(primary_domain: "example.com")
    s.wont_be valid?
    s.errors.messages.keys.must_include :primary_domain
  end
end

显然,唯一性验证器不使用find_by,但可能还有其他一些检查。是否有更好的候选人在这里实现同样的目标?

0 个答案:

没有答案