Rails / Rspec:在不触及数据库的情况下测试模型中的唯一性验证

时间:2011-07-13 04:03:53

标签: ruby-on-rails-3 rspec

我目前使用以下内容测试rspec中的唯一性验证:

@unique = Unique.create!(:unique_field => 'unique_value')
Unique.new(:unique_field => 'unique_value').should_not be_valid

理想情况下,我想从数据库中获取唯一性验证。任何想法如何去做?

2 个答案:

答案 0 :(得分:1)

validates_uniqueness_of不保证没有重复的记录插入,因为应用程序级别的唯一性检查本质上容易出现竞争条件more。要解决此问题,您可以在您的唯一字段上定义唯一索引,或者编写一些解决方法以使测试不依赖于您的数据库,但是我没有看到编写这些测试的任何意义。你的应用程序中只会有一些无用的代码。

答案 1 :(得分:0)

您可以通过编辑工厂来动态更改唯一值,以便在每次运行测试时进行更改

例如

Factory.define :user do |f|
  f.sequence(:username) { |n| "foo#{n}" }
  f.password "foobar"
  f.password_confirmation { |u| u.password }
  f.sequence(:email) { |n| "foo#{n}@example.com" }
end

我希望它有用,祝你好运

来源:Railscasts Episode #158: Factory Girl