2

検証に合格するために、プロジェクトには少なくとも 1 つのタスクが同時に作成されている必要があります。これは、これを検証するために使用するスニペットです。

class Project < ActiveRecord::Base
  validates :tasks, :length => { :minimum => 1 }
  ...
end

私が抱えている課題は、FactoryGirl を使用してタスクを前もってプロジェクトを構築するための適切なファクトリを作成することです。私は使用しています:

FactoryGirl.define do

  factory :task do
    name "Get this test passing"
    project
  end

  factory :project do
    title "Complete the application"
    factory :project_with_tasks do
      ignore do
        tasks_count 5
      end

      after(:create) do |project, evaluator|
        FactoryGirl.create_list(:task, evaluator.tasks_count, project: project)
      end
    end
  end

end

問題は、実際にプロジェクトを作成してから、関連するタスクを作成しようとするため、これが失敗することです。エラーは次のように報告されます。

Failure/Error: project = FactoryGirl.create(:project_with_tasks, tasks_count: 2)
 ActiveRecord::RecordInvalid:
   Validation failed: Projects must have at least one task

before(:create)すると、プロジェクトを参照できなくなります。

どんな助けでも大歓迎です!

4

2 に答える 2

2

次の方法で工場を構築することで、最終的に合格しました。

project = FactoryGirl.build(:project)  
project.tasks << FactoryGirl.create(:task)  
project.save

これにより、保存が完了する前にタスクがプロジェクトに追加されます。

于 2013-04-26T16:05:08.047 に答える
0

before(:create) でプロジェクトのタスクを「ビルド」し、 after(:create) で保存して検証エラーを回避できますか?

元:

  before(:build) do |instance|
    instance.tasks << build(:task, project: instance)
  end
  after(:create) do |instance|
    instance.tasks.each{|t| t.save!}
  end
于 2013-04-26T12:49:20.940 に答える