QA@IT

FactoryGirlでのhas_manyのテスト方法

3225 PV

FactoryGirlを使ってのhas_manyのテスト方法についての質問です。

class User < ActiveRecord::Base
 has_many :tasks
end

class Task < ActiveRecord::Base
 belongs_to :user
end

#spec/factories/users.rb
FactoryGirl.define do
  factory :test, :class => User do |f|
    f.name     "test"
    f.tasks {
          [task_1]
        }
  end
end

#spec/factories/tasks.rb
FactoryGirl.define do
  factory :task_1 , :class => Task do |f|
    f.msg "hello"
  end
end

rspecを実行するとFactoryGirl.create(:test)で
ActiveRecord::AssociationTypeMismatchエラーが出ます。
どなたか分かる方がいらしたら教えて下さいお願いします。

回答

FactoryGirlfactory はメソッドを定義するものではないので、

#spec/factories/users.rb
FactoryGirl.define do
  factory :test, :class => User do |f|
    f.name     "test"
    f.tasks {
          [FactoryGirl.create(task_1)]
        }
  end
end

のように FactoryGirl.create を使うか、この場合は複数生成したいので、 FactoryGirl.create_list を使って、以下のようにすれば良いのではないでしょうか。

#spec/factories/users.rb
FactoryGirl.define do
  factory :test, :class => User do |f|
    f.name     "test"
    f.tasks {
          FactoryGirl.create_list(task_1, 1)
        }
  end
end
編集 履歴 (0)
  • うまくいきました。ありがとうございました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。