代码之家  ›  专栏  ›  技术社区  ›  steel

单个测试的Rails/RSpec切换缓存

  •  8
  • steel  · 技术社区  · 10 年前

    因此,在我的应用程序中,我可以禁用所有测试的缓存,这将是理想的,但显然有许多遗留测试依赖于缓存的功能。有没有方法为单个RSpec测试启用Rails缓存?

    类似于:

    before(:each) do
      @cache_setting = Rails.cache.null_cache
      Rails.cache.null_cache = true
    end
    
    after(:each) do
      Rails.cache.null_cache = @cache_setting
    end
    
    it 'does not hit the cache' do
      ...
    end
    
    1 回复  |  直到 10 年前
        1
  •  12
  •   scorix    10 年前

    在里面 spec_helper.rb

    RSpec.configure do |config|
      config.before(:example, disable_cache: true) do
        allow(Rails).to receive(:cache).and_return(ActiveSupport::Cache::NullStore.new)
      end
    
      config.after(:example, disable_cache: true) do
        allow(Rails).to receive(:cache).and_call_original
      end
    end
    

    在里面 xxx_spec.rb

    RSpec.describe "a group without matching metadata" do
      it "does not run the hook" do
         puts Rails.cache.class
      end
    
      it "runs the hook for a single example with matching metadata", disable_cache: true do
         puts Rails.cache.class
      end
    end
    

    https://www.relishapp.com/rspec/rspec-core/docs/hooks/filters