2011-06-12 7 views
5

railstutorial में, क्यों लेखक उपयोग करने के लिए इस (लिस्टिंग 10.25) का चयन करता है: http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersRailstutorial: db: बनाम कारखाने महिला पॉप्युलेट

namespace :db do 
    desc "Fill database with sample data" 
    task :populate => :environment do 
    Rake::Task['db:reset'].invoke 
    User.create!(:name => "Example User", 
       :email => "[email protected]", 
       :password => "foobar", 
       :password_confirmation => "foobar") 
    99.times do |n| 
     name = Faker::Name.name 
     email = "example-#{n+1}@railstutorial.org" 
     password = "password" 
     User.create!(:name => name, 
        :email => email, 
        :password => password, 
        :password_confirmation => password) 
    end 
    end 
end 

नकली उपयोगकर्ताओं के साथ डेटाबेस को भरने के लिए, और भी (लिस्टिंग 7,16) http://ruby.railstutorial.org/chapters/modeling-and-viewing-users-two

Factory.define :user do |user| 
    user.name     "Michael Hartl" 
    user.email     "[email protected]" 
    user.password    "foobar" 
    user.password_confirmation "foobar" 
end 

ऐसा लगता है कि दोनों तरीकों से डेटाबेस अधिकार (कारखाना महिला डेटाबेस में उपयोगकर्ताओं को बनाने करता है) में उपयोगकर्ता बनाता है? परीक्षण उपयोगकर्ताओं को बनाने के दो अलग-अलग तरीकों का कारण क्या है, और वे अलग कैसे हैं? एक विधि दूसरे की तुलना में अधिक उपयुक्त कब है?

उत्तर

8

फ़ेकर और फैक्ट्री गर्ल का उपयोग उन उदाहरणों में दो अलग-अलग उद्देश्यों के लिए किया जा रहा है।

फ़ेकर का उपयोग करके एक रेक कार्य बनाया जाता है ताकि आप आसानी से डेटाबेस को पॉप्युलेट कर सकें, आमतौर पर विकास डेटाबेस। यह आपको बहुत से आबादी वाले, नकली डेटा के साथ अपने ऐप के चारों ओर ब्राउज़ करने देता है।

फैक्टरी परिभाषा परीक्षण लिखने के लिए सुविधाजनक बनाता है। उदाहरण के लिए, आपके आरएसपीसी परीक्षणों में आप लिख सकते हैं:

before(:each) do 
@user = Factory(:user) 
end 

फिर @user अनुसरण करने वाले परीक्षणों में उपलब्ध है। यह इन परिवर्तनों को परीक्षण डेटाबेस में लिख देगा, लेकिन याद रखें कि प्रत्येक बार जब आप परीक्षण चलाते हैं तो ये साफ़ हो जाते हैं।

+3

हम्म ... लेकिन वह 'User.create!' के बजाय, रेक कार्य के भीतर फैक्टरीगर्ल का उपयोग क्यों नहीं करेगा? क्या यह संभव नहीं है? – Ajedi32

संबंधित मुद्दे