我正在尝试使用after_create回调在FactoryGirl中定义一个has_many关系,就像在/spec/factories/emails.rb中一样:
FactoryGirl.define do
factory :email do
after_create do |email|
email.attachments << FactoryGirl.build(:attachment)
end
end
end
Run Code Online (Sandbox Code Playgroud)
附件在单独的工厂/spec/factories/attachment.rb中定义:
FactoryGirl.define do
factory :attachment do
# Attach the file to paperclip
file { fixture_file_upload(Rails.root.join('spec', 'support', 'myimage.png'), 'image/png') }
end
end
Run Code Online (Sandbox Code Playgroud)
在我的规范中使用:附件工作非常好,所以我确信工厂不是问题,但是当我尝试创建一个:来自工厂的电子邮件时,我得到以下异常抛出:
Failure/Error: email = FactoryGirl.create(:email)
NoMethodError:
undefined method `after_create=' for #<Email:0x007ff0943eb8e0>
Run Code Online (Sandbox Code Playgroud)
我有点不知所措,似乎找不到任何其他人得到同样的错误.
我现在已经尝试了几个小时让工厂女工创建两个工厂 - 一个用于用户,一个用于组织.
但我似乎不明白如何在工厂中反映'has_and_belongs_to_many'关系,一旦我尝试创建组织并将其与管理员用户关联,我会遇到各种错误消息(取决于我使用的方法) ).我的模型似乎工作正常,我的种子文件填充dev DB并创建所有关联.
现在我的文件看起来像这样:
用户工厂
FactoryGirl.define do
factory :user do
email 'example@example.com'
password 'password'
password_confirmation 'password'
after(:create) {|user| user.add_role(:user)}
factory :owner do
after(:create) {|user| user.add_role(:owner)}
end
factory :admin do
after(:create) {|user| user.add_role(:admin)}
end
factory :superadmin do
after(:create) {|user| user.add_role(:superadmin)}
end
end
end
Run Code Online (Sandbox Code Playgroud)
组织工厂
FactoryGirl.define do
factory :organization do |f|
f.name "example"
f.website "www.aquarterit.com"
f.association :users, :factory => :admin
end
end
Run Code Online (Sandbox Code Playgroud)
在我的规格中我测试了这个:
describe Organization do
it "has a valid factory" do
FactoryGirl.create(:organization).should be_valid
end
it "is invalid without …Run Code Online (Sandbox Code Playgroud)