2013-04-22 16 views
5

Questo è il mio modello Tag e non so come posso testare la funzionalità Rails.cache.come posso testare la funzione cache rails

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 

Sai come può essere testato?

risposta

7

Bene, in primo luogo, non si dovrebbe davvero testare il framework. I test di cache di Rails lo coprono apparentemente per te. Detto questo, vedi this answer per un piccolo aiuto che puoi usare. I test sarebbero quindi un aspetto simile:

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 

Questo in realtà non controlla il meccanismo di caching - solo che il blocco #fetch non viene richiamato. È fragile e legato all'implementazione del blocco fetch, quindi attenzione perché diventerà debito di manutenzione.

+1

E quale archivio cache stai utilizzando nell'ambiente di test? Hai questo in test.env? '' 'config.cache_store =: memory_store''' – knagode

+1

Penso che testare il framework sia perfettamente ok per confermare che funziona nel modo in cui lo capisco. I documenti potrebbero non essere chiari a me, o forse non sono completamente sicuro della mia comprensione. Come con TDD, solo l'atto di scrivere un caso di test può aiutarmi a chiarire esattamente quello che sto cercando di ottenere. –

Problemi correlati