如何在一步中构建具有子工厂的父级以通过validation
项目必须至少同时创建一个任务以确保validation通过。 这是我用来validation这个的片段:
class Project { :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)
意味着该项目无法参考。
任何帮助将不胜感激!
我最终通过以下方式建造工厂来通过它:
project = FactoryGirl.build(:project) project.tasks << FactoryGirl.create(:task) project.save
这会在保存完成之前将任务添加到项目中。
您可以尝试在(:create)之前“构建”项目的任务,然后(:create)保存它们以便通过validation错误吗?
例如:
before(:build) do |instance| instance.tasks << build(:task, project: instance) end after(:create) do |instance| instance.tasks.each{|t| t.save!} end