Тестирование кэша фрагментов Rails с помощью RSpec

Мне кажется, что это не так уж и много документированной темы, по крайней мере, у меня было много проблем с поиском нашей информации о лучшие практики здесь.

Я кэширую фрагмент в представлении с помощью 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 хочет вопросы, на которые можно ответить, поэтому для начала: как мне настроить и отключить этот тест, чтобы использовать кеширование, если в моем тестовом env не включено кеширование дефолт? В целом, однако, мне бы очень хотелось услышать, как вы могли бы успешно тестировать кеширование фрагментов в своих приложениях, если бы вам это удалось.

РЕДАКТИРОВАТЬ

Я принимаю ответ Кайлинанн, поскольку он касается проблемы, о которой я конкретно спрашиваю, но я решил, однако, что я даже не рекомендую кеширование интеграционного тестирования, если вы можете уйти от этого.

Вместо того, чтобы указывать прикосновение в моих объявлениях ассоциации, я создал наблюдатель, специфичный для моих потребностей в кэшировании, который непосредственно касается моделей, и я тестирую его изолированно.

Я бы порекомендовал при тестировании многомодельного наблюдателя изолированно также включить тест для проверки наблюдаемых_моделей наблюдателей, иначе вы можете скрыть слишком много реальности.

Конкретный ответ, который привел меня к этому, находится здесь: https://stackoverflow.com/a/33869/717365

8
задан Community 23 May 2017 в 12:10
поделиться