user_type是用户模型中的一列,必须是:presence =>真正。当将nil传递给user_type时,它拒绝在rspec中。但是,factory_girl可以使用sqlite3将nil user_type存储到字段中。
运行rails 3.1.0。 rspec 2.6.0和factory_girl 2.1.0
//用户模型:
validates :user_type, :presence => true
//工厂女孩定义:
Factory.define :user do |user|
user.name "Test User"
user.email "test@test.com"
user.password "password1"
user.password_confirmation "password1"
user.status "active"
user.user_type "employee"
end
Factory.define :user_level do |level|
level.role "sales"
level.position "member"
level.team 1
level.association :user
end
// rspec case:传递
it "should reject user type nil" do
user = Factory.build(:user, :user_type => nil)
user.should_not be_valid
end
it "should take user type 'employee'" do
user = Factory.build(:user, :user_type => 'employee')
user.errors[:user_type].should be_empty
user.should be_valid
end
有什么想法?谢谢。
答案 0 :(得分:2)
正如迈克尔·哈特尔在他的excellent Rails tutorial中指出的那样,工厂女孩在模型中绕过了attr_accessible
。例如,您可以使用Factory Girl覆盖“魔术”列。也许这也适用于验证?
在这种情况下,使用User.new实际创建用户似乎会更好,因为您正在测试创建和验证过程本身。