Ruby on rails 工厂女孩(4.2.0)多对多关系
我想使用FactoryGirl 4.2.0正确地建立多对多工厂集。我不断地遇到一些文档/示例,这些文档/示例的语法都是以前FactoryGirl版本中的过时语法,它们混合在一起,对我来说根本不起作用 考虑到以下两个资源及其链接表,如何设置此场景:Ruby on rails 工厂女孩(4.2.0)多对多关系,ruby-on-rails,rspec,ruby-on-rails-3.2,tdd,factory-bot,Ruby On Rails,Rspec,Ruby On Rails 3.2,Tdd,Factory Bot,我想使用FactoryGirl 4.2.0正确地建立多对多工厂集。我不断地遇到一些文档/示例,这些文档/示例的语法都是以前FactoryGirl版本中的过时语法,它们混合在一起,对我来说根本不起作用 考虑到以下两个资源及其链接表,如何设置此场景: class User < ActiveRecord::Base has_many :user_registrations has_many :registrations, through: :user_registrations end
class User < ActiveRecord::Base
has_many :user_registrations
has_many :registrations, through: :user_registrations
end
class UserRegistration < ActiveRecord::Base
belongs_to :user
belongs_to :registration
end
class Registration < ActiveRecord::Base
has_many :user_registrations
has_many :users, through: :user_registrations
end
它以以下方式失败,我意识到这是因为这种设置是针对一对多关系的
1) User Login Success
Failure/Error: user = FactoryGirl.create(:user_with_registrations)
NoMethodError:
undefined method `user=' for #<Registration:0x007fc48e2ca768>
# ./spec/factories.rb:18:in `block (4 levels) in <top (required)>'
1)用户登录成功
失败/错误:user=FactoryGirl.create(:用户注册)
命名错误:
未定义的方法“user=”用于#
#./spec/factories.rb:18:in'block(4层)in'
使用最新的FactoryGirl语法为多对多方案定义工厂集的正确方法是什么?(4.2.0)
谢谢 我想我以前已经讨论过这个问题了,问题是(不太明显,你会同意这一点)在工厂定义中使用常量名称 请尝试使用字符串,如下所示:
factory :user, class: 'User' do
...
对我来说,似乎你必须通过
用户注册
使拥有许多注册
和用户的关联。这样看起来
factory :user_registration do
association :user
association :registration
end
factory :user do
..setup for email and password
factory :user_with_registrations do
ignore do
registrations_count 1
end
after(:create) do |user, evaluator|
FactoryGirl.create_list(:user_registration, evaluator.registrations_count, user: user)
end
end
end
factory :registration do
..setup for registration
factory :registration_with_user do
ignore do
users_count 1
end
after(:create) do |registration, evaluator|
FactoryGirl.create_list(:user_registration, evaluator.users_count, registration: registration)
end
end
end
不。无论哪种方式,它的响应都是一样的。谢谢你的帮助!仅供参考:我已决定与制造商一起进行工厂测试。对我来说似乎更干净,我已经改变了一切。我可能会在未来的应用程序中使用factory_girl来测试差异。
factory :user_registration do
association :user
association :registration
end
factory :user do
..setup for email and password
factory :user_with_registrations do
ignore do
registrations_count 1
end
after(:create) do |user, evaluator|
FactoryGirl.create_list(:user_registration, evaluator.registrations_count, user: user)
end
end
end
factory :registration do
..setup for registration
factory :registration_with_user do
ignore do
users_count 1
end
after(:create) do |registration, evaluator|
FactoryGirl.create_list(:user_registration, evaluator.users_count, registration: registration)
end
end
end