【发布时间】:2012-12-20 15:19:56
【问题描述】:
class User < ActiveRecord::Base
attr_accessible :username, :password
attr_accessor :username, :password
validates :username, :presence => true, :uniqueness => true
validates :password, :presence => true
end
测试:
it "prevents username duplication" do
FactoryGirl.create(:user, username: 'ted').should be_valid
FactoryGirl.build(:user, username: 'ted').should_not be_valid
end
我已经确认 User.count() 是 2。唯一性约束我缺少什么?
【问题讨论】:
-
首先,你的测试失败了吗?
FactoryGirl.build不会创建模型,只是在内存中构建它。如果您收到User.count == 2,您的数据库中可能已经有另一个不相关的用户,您可以检查一下吗? -
到@PinnyM 的观点-也许在规范的
before(:each)或before(:all)部分中,您正在创建用户记录,导致2的计数? -
如果我将其切换为创建,用户数变为 2。对不起,我的意思是当记录正确保存时,我得到 2。验证应该会影响第二个构建的模型,对吗?无论如何,我创建用户对象的控制器肯定会继续创建用户,无论用户名是否唯一。
-
尝试用
User.new(username: 'ted').valid?.should be_false替换FactoryGirl.build(...) -
@normalocity:仍然失败。我也更正了添加密码,并且它恢复有效。
标签: ruby-on-rails ruby activemodel activesupport