Как отключить кэш при тестировании Rails-приложений
16 февраля 2009
Столкнулся с проблемой в одном из разрабатываемых Rails-приложений. Интеграционные тесты в cucumber проходят по одному, но при запуске всей кучей, начинают падать в failed.
Проблема оказалась в кэшировании данных через Rails.cache. Так как, по-моему разумению, в окружении test всякое кэширование должно быть отключено, то пришлось наваять «заглушку» для кэша:
config/environments/test.rb:
config.cache_store = :dummy_store
lib/dummy_store.rb:
class DummyStore < ActiveSupport::Cache::Store
def initialize
end
def read(name, options = nil)
super
end
def write(name, value, options = nil)
super
end
def delete(name, options = nil)
super
end
def delete_matched(matcher, options = nil)
super
end
end






Такие вещи лучше класть в mocks/test/foo.rb
Julik
Чем лучше? И кто его оттуда будет вызывать? Опять же, моки и интеграционное тестирование как-то несколько не вяжутся между собой.
Иногда вяжутся, иногда нет. Вызывать его оттуда будут dependencies, автоматом
а в конфиге test.rb поменять config.cache_classes = true на false разве не срабатывает ?
mcdba
Кэширование классов — это совсем из другой оперы. Я говорю про кэширование данных.