0

私のアプリケーションでは、ユーザーを作成するには、プログラムが既に存在している必要があります。ユーザーが作成されると、ユーザー属性に一致するプログラムが割り当てられます。適切なプログラムが存在せず、例外が発生した場合、ユーザーを作成できるようにプログラムを作成する方法を見つけようとしています。

現在、私はテストでこれを行っています:

  subject(:user) do
    Program.create!(name: 'test', gender: 'Female', goal_id: '1', experience_id: '1')
    User.create!(email: 'test@test.com', password: '12345678', password_confirmation: '12345678', goal_id: '1', experience_level_id: '1', gender: 'Female')
  end

代わりに、次のように Factory を作成したいと思います。

FactoryGirl.define do
  factory :user do
    email                               'test@test.com'
    password                            '12345678'
    password_confirmation               '12345678'
    goal_id                             1
    experience_level_id                 1
    gender                              'Female'
  end
end 

FactoryGirl を使用して、そのユーザーが既に存在するプログラムを必要とする場合、ユーザーを作成するにはどうすればよいですか?

4

3 に答える 3

1

これはあなたが望むものかもしれないと思います。

あなたのテストでは:

 program = FactoryGirl.create(:program)
 user = FactoryGirl.create(:user, 
   :goal_id => program.goal_id,
   :gender => program.gender,
   :experience_level_id => program.experience_id
)

あなたの工場で:

factory :program do
  gender "Female"
  goal_id '1'
  experience_id '1'
  name 'test'
end
factory :user do
  # other attributes
end

更新:常にこの方法でユーザーを設定したい場合は、ファクトリで次のようにすることができます。

factory :user do
  # other attributes
  after(:build) do |user|
    program = build(:program)
    user.goal_id = program.goal_id
    user.gender = program.gender
    user.experience_level_id = program.experience_id
  end
end

一部のテストでデフォルトのみが必要な場合は、ファクトリの名前を user_with_default_program のような名前に変更し、メインのユーザー ファクトリから継承させます。https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.mdのドキュメントを参照すると、ユース ケースに合わせてスリム化できるはずです。

于 2013-10-07T21:00:59.203 に答える
1

関連付けを追加してみてください:

  factory :user
    email                 "email@test.com"
    password              "12345678"
    password_confirmation "12345678"
    goal_id               1
    experience_level_id   1
    gender                "Female"
    association           :program
  end
于 2013-10-07T20:51:48.380 に答える
0

作成プロセスの一部としてUserファクトリに を検索または作成させ、保存する前にフィールドを適切に設定することができます。との関係は何ですか? あなたのコードからは明らかではありません。ProgramUserUserProgram

于 2013-10-07T20:53:39.393 に答える