如何在工厂女孩中创建关联记录以在创建时通过验证
How to create an associated record within factory girl to pass validations at creation
我对 FactoryGirl 知之甚少,只创建过没有关联的单记录工厂。这是我现在有两个关联模型的工厂:
factory :help_request do
name "Mrs. Bourque's holiday party"
description "We need volunteers to help out with Mrs. Bourque's holiday party."
end
factory :donation_item do
name "20 Cookies"
end
每当我需要关联两条记录时,我都会在 rspec 中使用如下代码进行关联:
require 'spec_helper'
describe HelpRequest do
let(:help_request) { FactoryGirl.create(:help_request) }
let(:donation_item) { FactoryGirl.create(:donation_item) }
subject { help_request }
before {
donation_item.help_request_id = help_request.id
donation_item.save!
}
通常这是有效的,但现在我确认至少有一个 donation_item
尚未标记为销毁:
class HelpRequest < ActiveRecord::Base has_many :events
has_many :donation_items, dependent: :destroy
validate :check_donation_items?
def has_donation_items?
self.donation_items.collect { |i| !i.marked_for_destruction? }.any?
end
def check_donation_items?
if !has_donation_items?
errors.add :a_help_request, "must have at least one item."
end
end
当我 运行 我的模型测试时,一切都失败了:
Failure/Error: let(:help_request) { FactoryGirl.create(:help_request) }
ActiveRecord::RecordInvalid:
Validation failed: A help request must have at least one item.
如何在 help_request
创建时关联工厂中的捐赠项目?我看到其他似乎相关的答案,但由于我对 FactoryGirl 的了解非常初级,所以我无法弄清楚如何让它发挥作用。
factory :donation_item do
name "20 Cookies"
help_request
end
factory :help_request do
name "Mrs. Bourque's holiday party"
description "We need volunteers to help out with Mrs. Bourque's holiday party."
end
那么在你的规范中:
let(:donation_item) { FactoryGirl.create(:donation_item, help_request: FactoryGirl.create(:help_request)) }
编辑
不要在 :donation_item 工厂中包含 help_request
关联,并在你的测试中这样做:
let(:help_request) do
help_request = build(:help_request)
help_request.donation_items << build(:donation_item)
help_request.save!
help_request
end
subject { help_request }
我对 FactoryGirl 知之甚少,只创建过没有关联的单记录工厂。这是我现在有两个关联模型的工厂:
factory :help_request do
name "Mrs. Bourque's holiday party"
description "We need volunteers to help out with Mrs. Bourque's holiday party."
end
factory :donation_item do
name "20 Cookies"
end
每当我需要关联两条记录时,我都会在 rspec 中使用如下代码进行关联:
require 'spec_helper'
describe HelpRequest do
let(:help_request) { FactoryGirl.create(:help_request) }
let(:donation_item) { FactoryGirl.create(:donation_item) }
subject { help_request }
before {
donation_item.help_request_id = help_request.id
donation_item.save!
}
通常这是有效的,但现在我确认至少有一个 donation_item
尚未标记为销毁:
class HelpRequest < ActiveRecord::Base has_many :events
has_many :donation_items, dependent: :destroy
validate :check_donation_items?
def has_donation_items?
self.donation_items.collect { |i| !i.marked_for_destruction? }.any?
end
def check_donation_items?
if !has_donation_items?
errors.add :a_help_request, "must have at least one item."
end
end
当我 运行 我的模型测试时,一切都失败了:
Failure/Error: let(:help_request) { FactoryGirl.create(:help_request) }
ActiveRecord::RecordInvalid:
Validation failed: A help request must have at least one item.
如何在 help_request
创建时关联工厂中的捐赠项目?我看到其他似乎相关的答案,但由于我对 FactoryGirl 的了解非常初级,所以我无法弄清楚如何让它发挥作用。
factory :donation_item do
name "20 Cookies"
help_request
end
factory :help_request do
name "Mrs. Bourque's holiday party"
description "We need volunteers to help out with Mrs. Bourque's holiday party."
end
那么在你的规范中:
let(:donation_item) { FactoryGirl.create(:donation_item, help_request: FactoryGirl.create(:help_request)) }
编辑
不要在 :donation_item 工厂中包含 help_request
关联,并在你的测试中这样做:
let(:help_request) do
help_request = build(:help_request)
help_request.donation_items << build(:donation_item)
help_request.save!
help_request
end
subject { help_request }