【问题标题】:Trouble on initializing a factory object初始化工厂对象时遇到问题
【发布时间】:2011-10-01 16:40:14
【问题描述】:

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

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

【问题讨论】:

  • 您能更新一下您的:user 工厂吗?
  • @kwon - 我更新了问题。

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


【解决方案1】:

我认为你应该反过来做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多