2013-04-22 9 views
5

यह मेरा टैग मॉडल है और मुझे नहीं पता कि मैं Rails.cache सुविधा का परीक्षण कैसे कर सकता हूं।मैं रेल कैश सुविधा का परीक्षण कैसे कर सकता हूं

class Tag < ActiveRecord::Base 
    class << self 
    def all_cached 
     Rails.cache.fetch("tags.all", :expires_in => 3.hours) do 
     Tag.order('name asc').to_a 
     end 
    end 
    def find_cached(id) 
     Rails.cache.fetch("tags/#{id}", :expires_in => 3.hours) do 
     Tag.find(id) 
     end 
    end 
    end 

    attr_accessible :name 
    has_friendly_id :name, :use_slug => true, :approximate_ascii => true 
    has_many :taggings #, :dependent => :destroy 
    has_many :projects, :through => :taggings 
end 

क्या आप जानते हैं कि इसका परीक्षण कैसे किया जा सकता है?

उत्तर

7

ठीक है, सबसे पहले, आपको वास्तव में ढांचे का परीक्षण नहीं करना चाहिए। रेल के कैशिंग परीक्षण स्पष्ट रूप से आपके लिए कवर करते हैं। उस ने कहा, एक छोटे से सहायक के लिए this answer देखें जिसका आप उपयोग कर सकते हैं। आपका परीक्षण तो कुछ ऐसा दिखाई देगा:

describe Tag do 
    describe "::all_cached" do 
    around {|ex| with_caching { ex.run } } 
    before { Rails.cache.clear } 

    context "given that the cache is unpopulated" do 
     it "does a database lookup" do 
     Tag.should_receive(:order).once.and_return(["tag"]) 
     Tag.all_cached.should == ["tag"] 
     end 
    end 

    context "given that the cache is populated" do 
     let!(:first_hit) { Tag.all_cached } 

     it "does a cache lookup" do 
     before do 
      Tag.should_not_receive(:order) 
      Tag.all_cached.should == first_hit 
     end 
     end 
    end 
    end 
end 

यह वास्तव में कैशिंग तंत्र की जांच नहीं करता है - सिर्फ इतना है कि #fetch ब्लॉक लागू नहीं है। यह भंगुर है और fetch ब्लॉक के कार्यान्वयन से जुड़ा हुआ है, इसलिए सावधान रहें क्योंकि यह रखरखाव ऋण बन जाएगा।

+1

और परीक्षण वातावरण में आप किस कैश स्टोर का उपयोग कर रहे हैं? क्या आपके पास test.env में है? '' config.cache_store =: memory_store''' – knagode

+1

मुझे लगता है कि ढांचे का परीक्षण पूरी तरह ठीक है यह पुष्टि करने के लिए कि यह समझने के तरीके से काम करता है। दस्तावेज़ मुझे स्पष्ट नहीं हो सकते हैं, या मैं बस अपनी समझ के बारे में पूरी तरह से यकीन नहीं कर सकता। टीडीडी के साथ ही, एक टेस्ट केस लिखने का कार्य मुझे स्पष्ट रूप से स्पष्ट करने में मदद कर सकता है कि मैं क्या हासिल करने की कोशिश कर रहा हूं। –

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