工厂女孩与协会/委托模型的麻烦

时间:2014-01-29 15:51:43

标签: ruby-on-rails rspec factory-bot

在运行测试时,我收到此错误:Validation failed: User can't be blank (ActiveRecord::RecordInvalid)。相关代码在这里。当我将user添加到用户配置文件时,我想出了一个循环定义(测试突然完成)。我认为需要回调,但我最终想知道在哪里。我非常感谢你的帮助。 :)

模型/ user.rb

has_one :user_profile, dependent: :destroy, inverse_of: :user
delegate :first_name, :last_name, :sex, :birthday,
  :location, :school, to: :user_profile

模型/ user_profile.rb

belongs_to :user, inverse_of: :user_profile
validates :user, presence: true

factories.rb

factory :user do
  user_profile

end

factory :user_profile do
  first_name Faker::Name.first_name # everything works, I put in the data already.
  # ?????
end

2 个答案:

答案 0 :(得分:2)

最后解决它。发生的事情是两个模型都需要彼此保存才能保存。所以我在user工厂添加了一个after build钩子。我错过的是将引用传递给用户本身。

factory :user do |user|

    after(:build) do |user|
      create(:user_profile, user: user)
    end

  end

  factory :user_profile do
    association :user
    first_name Faker::Name.first_name
  end

答案 1 :(得分:1)

像这样创建工厂:

FactoryGirl.define do
   factory :user do
      first_name Faker::Name.first_name
   end
end

FactoryGirl.define do
   factory :user_profile do
      association :user, strategy: :build
   end
end

user_profile belongs_to user,因此我们在user_profile中创建关联。