我正在使用Ruby on Rails 3.1.0,rspec-rails 2
和Factory
宝石。当我为Account
类声明Factory对象时,我在验证过程中遇到了一些麻烦。
在模型文件中我有:
class Account < ActiveRecord::Base
belongs_to :user
attr_accessible :name, ..., :password
validates :name,
:presence => true
...
validates :password,
:presence => true
end
在工厂文件中我有:
FactoryGirl.define do
factory :account, do
sequence(:name) { |n| "Foo #{n}"}
...
password 'psw_secret'
association :user
end
factory :user do
auth 'registered'
end
end
当在规范文件中我声明let!(:account) { Factory(:account) }
它按预期工作但是当我使用以下内容时:
let!(:user) { Factory(:user, :account => Factory(:account)) }
我收到此错误:
Failure/Error: let!(:user) { Factory(:user, :account => Factory(:account)) }
ActiveRecord::RecordInvalid:
Validation failed: Account password can not be blank, Account is invalid
为什么 我收到了这个错误?我该如何解决这个问题呢?
答案 0 :(得分:1)
我认为你应该反过来做这件事:
@user = Factory(:user)
@account = Factory(:account, :user => @user)
关系在account
上定义,而不在user
上定义。
希望这会有所帮助。