2

has_oneプロファイルのユーザーモデルがあります。このようにユーザーを作成すると、プロファイルが自動的に作成されます。

class User < ActiveRecord::Base
  has_one :profile, dependent: :destroy
  after_create :create_profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

これはすべてうまく機能し、デフォルトのプロファイルがすべてのユーザーで作成されます。

私は自分のユーザーモデルのテストをしたいのですが、これは私が苦労しているところです。

FactoryGirlを使用していて、そのようなユーザーを作成したい

FactoryGirl.define do
  factory :user do
    sequence(:email) {|n| "user_#{n}@example.com"}
    sequence(:username) {|n| "user_#{n}"}
    password "secret"
    factory :activated_user do
      before(:create) {|user| user.activated = true}
      association :profile, factory: :profile_for_activated_user
    end
  end
end

FactoryGirl.define do
  factory :profile do
    factory :profile_for_activated_user do
      first_name "Johnny"
      last_name "User"
    end
  end
end

これは私にとって物事がうまくいかないところです。after_createコールバック(私が欲しい)は、FactoryGirl(on FactoryGirl.create :activated_user)によって作成された関連付けをオーバーライドするため、プロファイルが空白になり、テストに失敗します。モデルで関連付けを作成する方法を変更する必要がありますか(テストツールに合わせてコードを変更する必要はありません)、またはFactoryGirlでこれを管理する方法はありますか?FactoryGirlでユーザーを作成した後、テストでプロファイル属性を手動で割り当てる必要がありますか?

4

1 に答える 1

2

次のように after_create コールバックをスキップできます。

FactoryGirl.define do
  factory :user do
    after(:build) { |user| user.class.skip_callback(:create, :after, :create_setting) }
  end
end
于 2012-06-27T19:56:16.943 に答える