यहाँ पर विधि को फोन करके प्रत्येक का उपयोग करता FactoryGirl documentation से एक उदाहरण है। मैं क्या करना चाहता हूं प्रभावी रूप से user.id
पर कॉल करें, लेकिन इसे एक विशेषता की परिभाषा के रूप में सेट करने के लिए। यहाँ एक छीन नीचे उदाहरण है:FactoryGirl एक और कारखाना
**models/job.rb**
...
belongs_to :assignee, :class_name => "User"
belongs_to :user
...
attr_accessible :assignee_id, :user_id
...
end
**factories/jobs.rb**
FactoryGirl.define do
factory :job do
assignee_id user.id #what I would like to do, but triggers "undefined method 'id'" error
user_id user.id #user_id is an attribute of the model and is the job assignor
end
मैं प्रलेखन कि उपनाम की चर्चा का हिस्सा शामिल करने की कोशिश की है, लेकिन कोई भाग्य के साथ:
FactoryGirl.define do
factory :user, :aliases => [:assignee] do
....
मैं की तरह महसूस मैं (आशा?) मी यहाँ बंद है, लेकिन किसी भी अंतर्दृष्टि की सराहना की है। धन्यवाद।
संपादित करें: यह कोड मेरी चश्मा चल रहा है!
**factories/jobs.rb**
FactoryGirl.define do
factory :job do
before(:create) do |job|
user = FactoryGirl.create(:user)
job.assignee = user
job.user = user
end
association :assignee, factory: :user
association :user, factory: :user
sequence(:user_id) { |n| n }
sequence(:assignee_id) { |n| n }
...
end
और यह मेरी it { should be_valid }
कल्पना से गुजरता है, तो ऐसा लगता है कि कारखाने, ठीक है, हालांकि मुझे लगता है कि मैं कल्पना अपने आप में कुछ रिफैक्टरिंग है जब मैं FactoryGirl.create
फोन कर रहा हूँ।
उपरोक्त कोड में mguymon से सुझाव शामिल हैं। धन्यवाद!
अंतिम अद्यतन
वापस जा रहा है और फिर से पढ़ने Hartl's discussion on model associations के बाद, मैं आराम करने के लिए इस मामले को डाल करने के लिए कर रहा था। जो मैंने ऊपर दिया है वह तकनीकी रूप से मान्य था, लेकिन जब मैंने अपने spec में नौकरियां बनाई या बनाईं तो वास्तव में गुणों को ठीक से पास नहीं किया। यहाँ मैं क्या पड़ा है चाहिए:
FactoryGirl.define do
factory :job do
association :assignee, factory: :user
user
end
end
मेरे समस्या भी मैं अपनी कल्पना में कारखानों का निर्माण किया गया था से उपजी है, तो यहाँ मैं कैसे किया जाना चाहिए था किया गया यह कर रही है (लेकिन नहीं था ... आह):
let(:user) { create(:user) }
before { @job = create(:job, user: @user) }
ऐसा लगता है कि मुझे अपने कारखाने में association :user
स्पष्ट रूप से नहीं है, और न ही मुझे ऊपर से before
ब्लॉक की आवश्यकता है।
एक के रूप में अलग रूप में, मैं यह भी पता चला है कि मैं एक expect
कथन में puts @job
शामिल करके डीबग कर सकते हैं, या @job.assignee_id
फोन सुनिश्चित करें कि गुण सही ढंग से लोड किया जा रहा है बनाने के लिए। जब वह विशेष spec चलाया जाता है, तो puts
कथन F
या .
द्वारा सटीक रूप से आउटपुट आउटपुट करेगा।
क्षमा करें, लेकिन क्या आप अपवाद स्टैक ट्रेस दिखा सकते हैं? धन्यवाद – ted