1
我有這些模型:如何獲取創建的FactoryGirl對象?
class User < ActiveRecord::Base
has_many :company_users, :dependent => :delete_all
class Company < ActiveRecord::Base
has_many :company_users, :dependent => :delete_all
has_many :users, :through => :company_users
class CompanyUser < ActiveRecord::Base
belongs_to :company
belongs_to :user
我用這個輔助函數來創建並登錄:
def create_company_admin
company_user = FactoryGirl.create(:company_user, :has_shopper, :has_company, :admin)
user = User.first
login_as user, scope: :user
company_user
end
這是實際測試
feature 'user listing' do
background do
company_user = create_company_admin
end
scenario 'getting user list' do
visit '/companies'
page.has_content? company_user.user.name
end
end
這工作,直到他所稱的地方:似乎不存在的company_user.user.name。在那裏,我得到了一個未定義的局部變量或方法`company_user」
這是工廠:
factory :company_user, class: CompanyUser do
authorized true
trait :admin do
admin true
end
trait :not_admin do
admin false
end
trait :has_shopper do
association :user, factory: :shopper
end
trait :has_company do
association :company, factory: :company
end
end
編輯:
這是購物者的工廠(這是一種用戶)
factory :shopper, class: User do
username "user"
email "[email protected]"
password "password1"
after(:create) do |u|
u.skip_confirmation!
u.save!
end
end
如何獲得測試中的用戶,公司和company_user?
但用戶似乎創建因爲當我跟隨在Firefox我看到在用戶和公司記錄的,兩者都顯示並鏈接到用戶,以便這是正確的。我編輯的問題也包括購物者工廠(實際上是一個用戶)。我試圖在助手中創建用戶,但後來我收到一條錯誤消息,指出郵件地址已被使用(這也證實了我認爲用戶已經使用company_user創建的想法)。 – rept
當我添加:用戶= User.first和公司= Company.first它的情況下工作。這是一個好習慣嗎?如果我有多個用戶或公司,該怎麼辦? – rept
我會說好的做法是僅創建您需要的模擬對象,以便很容易參考。如果您只創建了一個,那麼您可以使用'Model.first',否則當您創建對象並將其與測試中的對象一起引用時,它會將電子郵件地址(用戶的情況下)傳遞到工廠。好的,所以你的用戶是在購物工廠中創建的,所以你不需要事先創建它(我假定你的公司工廠的工作原理相同) – andreofthecape