2012-05-08 10 views
14

मेरे पास एक मॉडल क्लास है जो रेडिस में डेटा कैश करती है। पहली बार जब मैं मॉडल पर एक विधि कहता हूं, तो यह JSON/हैश मान की गणना करता है और इसे Redis में संग्रहीत करता है। कुछ परिस्थितियों में मैं उस डेटा को 'फ्लश' करता हूं और इसे अगली कॉल पर पुनः संयोजित किया जाता है।रेल के साथ रेडिस के लिए आरएसपीसी के साथ परीक्षण परीक्षण

यहाँ कोड का टुकड़ा एक मैं Redis में डाटा स्टोर करने का उपयोग करने के समान है:

def cache_data 
    self.data_values = data_to_cache 
    REDIS.set(redis_key,ActiveSupport::JSON.encode(self.data_values)) 
    REDIS.get(redis_key) 
end 

def data_to_cache 
    // generate a hash of values to return 
end 

मैं कैसे इकाई इस कोड को परीक्षण करना चाहिए? मैं आरएसपीसी और कैपिबरा का उपयोग करता हूं। अगर यह मदद करता है तो मैं एकीकरण परीक्षण के लिए ककड़ी और कैपबारा का भी उपयोग करता हूं।

redis_instance = MockRedis.new 
Redis.stubs(:new).returns(redis_instance) 
Redis::Store.stubs(:new).returns(redis_instance) 

उसके बाद मैं करूंगा: ताकि आप यह सुनिश्चित करें कि परीक्षण किसी भी मशीन भले ही redis सर्वर स्थापित नहीं है पर चलेगा हो जाएगा

उत्तर

18

परीक्षण चलने के दौरान मुझे रेडिस चलाना पसंद है। रेडिस, उदा। पोस्टग्रेज़, बेहद तेज़ है और परीक्षण रन टाइम को धीमा नहीं करता है।

बस सुनिश्चित करें कि आप REDIS.flush पर before(:each) ब्लॉक, या संबंधित ककड़ी हुक में कॉल करें।

आप redis की स्वतंत्र रूप से data_to_cache परीक्षण कर सकते हैं, लेकिन जब तक आप पूरी तरह से redis ड्राइवर का उपयोग कर रहे हैं और अनुबंध प्रदान करता है पर भरोसा कर सकते हैं, यह सुरक्षित है वास्तव में cache_data परीक्षण करने के लिए (और इसी कैश विधि लाने) रहते हैं। इससे आपको अपने परीक्षणों के थोक पुनर्लेखन के बिना एक अलग रेडिस ड्राइवर (या एक अलग तेज़ केवी स्टोर में) स्विच करने की अनुमति मिलती है।

+11

मुझे विश्वास है कि यह अब 'REDIS.flushdb' है –

17

सबसे पहले spec_helper.rb में नीचे दिए गए कोड को जोड़ने परीक्षण:

  1. डेटा REDIS को पत्र लिखा उम्मीद डेटा
  2. cache_data, flush_data का एक क्रम है, cache_data data_to_cache दो बार
01 कॉल
+0

तो आप रेडिस चलाने और वास्तव में रेडिस के साथ डेटा की बातचीत का परीक्षण करने की सलाह देंगे। यह परीक्षण चलाए जाने पर रेडिस चलाने की निर्भरता रखता है (जो कि मैं सामान्य रूप से नहीं हूं)। लेकिन यह एक निर्भरता जोड़ता है कि मैं कुछ देख सकता हूं कि कुछ स्टब्स के साथ हैंडलिंग की सिफारिश कर सकते हैं। –

+0

नहीं। यह मॉकरेडिस कर रहा है ... यह डेटा को मेमोरी में संग्रहीत करता है ताकि आपको रेडिस सर्वर की आवश्यकता न हो। मैंने कहा "तो आप सुनिश्चित होंगे कि परीक्षण किसी भी मशीन पर चलेंगे भले ही रेडिस सर्वर स्थापित नहीं है"। – bcd

+10

एक चीज जो आप इस उत्तर के शीर्ष पर जोड़ना चाहती है, जो बहुत उपयोगी थी: अपने जेमफाइल में 'मणि' mock_redis 'जोड़ें और इस लाइन को अपने spec_helper में जोड़ें' साथ ही 'mock_redis' –