初始化工厂对象时出现问题

时间:2011-10-01 16:40:14

标签: ruby-on-rails ruby ruby-on-rails-3 rspec rspec2

我正在使用Ruby on Rails 3.1.0,rspec-rails 2Factory宝石。当我为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

为什么 我收到了这个错误?我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

我认为你应该反过来做这件事:

@user = Factory(:user)
@account = Factory(:account, :user => @user)

关系在account上定义,而不在user上定义。 希望这会有所帮助。