我有一个简化的模型:
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,但可能还有其他一些检查。是否有更好的候选人在这里实现同样的目标?