我目前使用以下内容测试rspec中的唯一性验证:
@unique = Unique.create!(:unique_field => 'unique_value')
Unique.new(:unique_field => 'unique_value').should_not be_valid
理想情况下,我想从数据库中获取唯一性验证。任何想法如何去做?
答案 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
我希望它有用,祝你好运