gpt4 book ai didi

rspec - 如何在 FactoryBot 中使用 has_many 关联设置工厂

转载 作者:行者123 更新时间:2023-12-03 05:05:11 25 4
gpt4 key购买 nike

有人可以告诉我我的设置方式是否错误吗?

我有以下具有 has_many.through 关联的模型:

class Listing < ActiveRecord::Base
attr_accessible ...

has_many :listing_features
has_many :features, :through => :listing_features

validates_presence_of ...
...
end


class Feature < ActiveRecord::Base
attr_accessible ...

validates_presence_of ...
validates_uniqueness_of ...

has_many :listing_features
has_many :listings, :through => :listing_features
end


class ListingFeature < ActiveRecord::Base
attr_accessible :feature_id, :listing_id

belongs_to :feature
belongs_to :listing
end

我正在使用 Rails 3.1.rc4、FactoryGirl 2.0.2、factory_girl_rails 1.1.0 和 rspec。这是我对 :listing 的基本 rspec rspec 健全性检查工厂:

it "creates a valid listing from factory" do
Factory(:listing).should be_valid
end

这里是工厂(:列表)

FactoryGirl.define do
factory :listing do
headline 'headline'
home_desc 'this is the home description'
association :user, :factory => :user
association :layout, :factory => :layout
association :features, :factory => :feature
end
end

:listing_feature:feature工厂的设置也类似。
如果association :features该行被注释掉,然后我的所有测试都通过了。
当它是

association :features, :factory => :feature

错误信息是 undefined method 'each' for #<Feature>我认为这对我来说是有意义的,因为 listing.features返回一个数组。所以我把它改为

association :features, [:factory => :feature]

我现在得到的错误是 ArgumentError: Not registered: features以这种方式生成工厂对象是不明智的,还是我错过了什么?非常感谢您的所有意见!

最佳答案

或者,您可以使用 block 并跳过 association 关键字。这使得无需保存到数据库即可构建对象(否则,即使您使用 build 函数而不是 create,has_many 关联也会将您的记录保存到数据库中)。

FactoryGirl.define do
factory :listing_with_features, :parent => :listing do |listing|
features { build_list :feature, 3 }
end
end

关于rspec - 如何在 FactoryBot 中使用 has_many 关联设置工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com