Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails/RSpec toggle cache for a single test

So in my app I can disable the cache for all tests, which would be ideal, but apparently there are a number of legacy tests that rely on the cache being functional. Is there a way to enable the Rails cache for a single RSpec test?

Something like:

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
like image 472
steel Avatar asked Aug 10 '15 21:08

steel


1 Answers

in 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

in 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

like image 189
scorix Avatar answered Oct 14 '22 06:10

scorix