मैं भी हाइबरनेट के साथ काम करता था। ActiveRecord रास्ता हाइबरनेट से बहुत अलग है। बेहतर या बदतर के लिए आपको अपने दिमाग को मुक्त करने की जरूरत है। जावा और हाइबरनेट में आपके पास अक्सर कुल रूट और ऑब्जेक्ट ग्राफ़ होता है। आम तौर पर, ऑब्जेक्ट ग्राफ़ और कोड बेस दोनों रूबी में भी छोटे होते हैं। मुझे आपका विशेष मामला नहीं पता है, इसलिए मैं सावधानी से चलूंगा, लेकिन मैं आपको अपनी जावा आदतों में रूबी और रेलों को फिट करने की कोशिश करने की चेतावनी देता हूं।
आप आरएसपीईसी के साथ कस्टम निर्देशिकाओं का उपयोग ऐसे तरीके से व्यवस्थित करने के लिए कर सकते हैं जो आपके और आपकी टीम के लिए समझ में आता है।
#spec/queries/my_custom_search_spec.rb
require 'spec_helper'
describe MyModel do
it "should do this query and return X" do
subject.some_defined_scope_search.should == "something"
end
end
और आप उपनिर्देशिकाएं हो सकता है, स्वचालित रूप से rspec द्वारा उठाया जा रहा है, spec/models/account/..
की तरह कल्पना स्वचालित रूप से rake spec
या rspec spec
द्वारा उठाया हो जाएगा। मैंने ऊपर एक साधारण उदाहरण लिखा है, क्योंकि मुझे आपका मामला नहीं पता है। क्या आप प्रश्नों के साथ स्कोप परिभाषित करते हैं, या विशेष तरीकों को परिभाषित करते हैं?
मैं दृढ़ता से फिक्स्चर को छोड़ने की सलाह देता हूं (जैसे कि आवेषण - विरोधी पैटर्न, मेरे लिए) कुछ और प्रतिक्रियात्मक, कारखानों की तरह। मुझे factory_girl पसंद है। यह आपके ऐप को अधिक चुस्त तरीके से विकसित करता है, आईएमओ।
संपादित करें:
RSpec.configure do |config|
require 'database_cleaner'
config.add_setting :skip_database_clean
config.skip_database_clean = false
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
end
config.after(:each) do
MongoMapper.database.collections.each(&:remove)
DatabaseCleaner.clean unless config.skip_database_clean
end
मैं चर skip_database_clean
जोड़ें ताकि मैं सक्षम/प्रत्येक कल्पना के बाद autocleanup निष्क्रिय कर सकते हैं सक्षम/अक्षम स्वत: सफाई के लिए सेटिंग्स के साथ मेरी spec_helper.rb जोड़ने (प्रत्येक "यह") ।
before :all do
@an_object = some_expensive_test_buildup
RSpec.configuration.skip_database_clean = true
end
after :all do
RSpec.configuration.skip_database_clean = false
DatabaseCleaner.clean
end
सुनिश्चित नहीं है कि "प्रश्न" से आपका क्या मतलब है। रेल में, वस्तुओं को बनाए रखने के लिए एक स्थान के रूप में अपने डेटाबेस के बारे में सोचना बेहतर है। ActiveRecord ऑब्जेक्ट्स अधिक सटीक होने के लिए। ओआरएम सभी डेटाबेस तर्क और एसक्यूएल का ख्याल रखता है। उनको तब तक परीक्षण करने की आवश्यकता नहीं है जब तक कि आप सम्मेलन के खिलाफ कुछ नहीं कर रहे हों। –
@ माइक किसान ActiveRecord एक जटिल और effecient sql 20 तालिकाओं के बीच जुड़ जाएगा यदि आप किसी विशिष्ट मान का अनुरोध करने से पहले 20 बार ऑब्जेक्ट ग्राफ़ चलाते हैं? – egervari
जब तक आप अपने संगठनों को सही तरीके से सेटअप करते हैं, मैं वास्तव में नहीं देखता कि क्यों नहीं। डेटाबेस पृष्ठभूमि से आ रहा है, हालांकि मैं आपका बिंदु देखता हूं। यह सुनिश्चित करने के लिए परीक्षण लिखना कि आपके प्रश्न सही तरीके से बनाए गए हैं और प्रदर्शनकर्ता आपके द्वारा निर्दिष्ट जटिलता के साथ एक अच्छा विचार है। अपने एसोसिएशन के लिए कुछ finder_sql, counter_sql, delete_sql, और insert_sql को संशोधित करना अधिक जटिल प्रश्नों के लिए सहायक भी हो सकता है। देखें (http://j.mp/lOSBkh) –