Isolate each specs for cache store (#6450)

The cache store is explicitly used by some specs, but they were not
isolated and therefore not reliable. This fixes the issue by clearing
the cache after each specs.
shrike
Akihiko Odaki 2018-02-18 06:35:05 +09:00 committed by Eugen Rochko
parent a71af98401
commit 9b8a448477
4 changed files with 17 additions and 14 deletions

View File

@ -23,6 +23,10 @@ Rails.application.configure do
config.consider_all_requests_local = true config.consider_all_requests_local = true
config.action_controller.perform_caching = false config.action_controller.perform_caching = false
# The default store, file_store is shared by processses parallely executed
# and should not be used.
config.cache_store = :memory_store
# Raise exceptions instead of rendering exception templates. # Raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = false config.action_dispatch.show_exceptions = false

View File

@ -42,11 +42,6 @@ RSpec.describe Setting, type: :model do
described_class[key] described_class[key]
end end
it 'calls Rails.cache.fetch' do
expect(Rails).to receive_message_chain(:cache, :fetch).with(cache_key)
described_class[key]
end
context 'Rails.cache does not exists' do context 'Rails.cache does not exists' do
before do before do
allow(RailsSettings::Settings).to receive(:object).with(key).and_return(object) allow(RailsSettings::Settings).to receive(:object).with(key).and_return(object)
@ -103,6 +98,14 @@ RSpec.describe Setting, type: :model do
Rails.cache.write(cache_key, cache_value) Rails.cache.write(cache_key, cache_value)
end end
it 'does not query the database' do
expect do |callback|
ActiveSupport::Notifications.subscribed callback, 'sql.active_record' do
described_class[key]
end
end.not_to yield_control
end
it 'returns the cached value' do it 'returns the cached value' do
expect(described_class[key]).to eq cache_value expect(described_class[key]).to eq cache_value
end end

View File

@ -90,9 +90,7 @@ describe InstancePresenter do
describe "user_count" do describe "user_count" do
it "returns the number of site users" do it "returns the number of site users" do
cache = double Rails.cache.write 'user_count', 123
allow(Rails).to receive(:cache).and_return(cache)
allow(cache).to receive(:fetch).with("user_count").and_return(123)
expect(instance_presenter.user_count).to eq(123) expect(instance_presenter.user_count).to eq(123)
end end
@ -100,9 +98,7 @@ describe InstancePresenter do
describe "status_count" do describe "status_count" do
it "returns the number of local statuses" do it "returns the number of local statuses" do
cache = double Rails.cache.write 'local_status_count', 234
allow(Rails).to receive(:cache).and_return(cache)
allow(cache).to receive(:fetch).with("local_status_count").and_return(234)
expect(instance_presenter.status_count).to eq(234) expect(instance_presenter.status_count).to eq(234)
end end
@ -110,9 +106,7 @@ describe InstancePresenter do
describe "domain_count" do describe "domain_count" do
it "returns the number of known domains" do it "returns the number of known domains" do
cache = double Rails.cache.write 'distinct_domain_count', 345
allow(Rails).to receive(:cache).and_return(cache)
allow(cache).to receive(:fetch).with("distinct_domain_count").and_return(345)
expect(instance_presenter.domain_count).to eq(345) expect(instance_presenter.domain_count).to eq(345)
end end

View File

@ -51,6 +51,8 @@ RSpec.configure do |config|
end end
config.after :each do config.after :each do
Rails.cache.clear
keys = Redis.current.keys keys = Redis.current.keys
Redis.current.del(keys) if keys.any? Redis.current.del(keys) if keys.any?
end end