Я чувствую, что это не так много задокументированной темы, по крайней мере, у меня было много проблем с поиском наших лучших практик здесь.
Я кеширую фрагменты в представлении, используяcache_key:
%tbody
- @employees.each do |employee|
- cache employee do
%tr[employee]
%td= employee.name
%td= employee.current_positions
%td= employee.home_base
%td= employee.job_classes
Теперь я могу добавить: touch => true на сторону: own_to моих ассоциаций has_many, и это будет делать все, что мне нужно, чтобы этот фрагмент кэшировался в актуальном состоянии, но на всю жизньМне трудно понять, как это проверить.
Вставить: touch => true легко и удобно, но оно распространяет логику истечения на несколько мест.Я хотел бы иметь спецификацию запроса RSpec, которая просматривает и проверяет поведение этого, что не может сильно измениться, но может привести все требования к кешированию в один конкретный файл, который описывает, что должно происходить.
Я попытался сделать следующее:
require 'spec_helper'
include AuthenticationMacros
describe "Employee index caching" do
before do
Rails.cache.clear
ActionController::Base.perform_caching = true
login_confirmed_employee
end
after do
ActionController::Base.perform_caching = false
end
specify "the employee cache is cleared when position assignments are modified"
specify "the employee cache is cleared when home base assignments are modified"
end
Спецификации были уточнены с помощью шагов Capybara, чтобы пройти и, конечно, сделать обновления, и я подумал, что я на правильном пути.Но тесты мерцали странными способами.Я бы изменил спецификации для вывода объектов работника cache_key, и иногда cache_keys менялся, а иногда нет, иногда спецификации проходили, а иногда нет.
Это даже хороший подход?
Я знаю, что SO хочет, чтобы вопросы отвечали, поэтому для начала: как я могу настроить и разорвать этот тест для использования кэширования, если в моей тестовой среде по умолчанию нет кэширования?В целом, однако, мне бы очень хотелось услышать, как вы можете успешно тестировать фрагментированное кэширование в своих приложениях, если у вас это получилось.
EDIT
Я принимаю ответ cailinanne, поскольку он решает проблему, о которой я специально спрашиваю, но я решил, однако, что я даже не рекомендую кэширование интеграционного тестирования, если вы можете от него уйти.
Вместо указания касанияв своих декларациях об ассоциации я создал наблюдателя, специфичного для моих потребностей в кэшировании, который напрямую касается моделей, и я тестирую его изолированно.
Я бы порекомендовал, если бы тестирование наблюдателя с множественными моделями изолированно включало такжетест для проверки наблюдателями наблюдаемых_моделей, в противном случае вы можете заглушить слишком много реальности.
Конкретный ответ, который привел меня к этому, здесь: https://stackoverflow.com/a/33869/717365