Как проверить кэширование записей Rails в модульных тестах? - PullRequest
1 голос
/ 21 июля 2011

Я пытаюсь выполнить модульный тест, чтобы убедиться, что определенные операции не выполняют / не запрашивают базу данных. Есть ли какой-нибудь способ, которым я могу следить за запросами, или какой-то счетчик, который я могу проверить в самом худшем случае?

1 Ответ

2 голосов
/ 22 июля 2011

Если вы хотите определить, действительно ли Rails (ActiveRecord) кеширует запросы, вам не нужно писать модульный тест для них - они уже существуют и являются частью самого Rails.

Редактировать:

В этом случае я бы, вероятно, посмотрел, смогу ли я адаптировать одну из стратегий, используемых командой rails, для тестирования самого ActiveRecord.Проверьте следующий тест по моей ссылке выше:

def test_middleware_caches
  mw = ActiveRecord::QueryCache.new lambda { |env|
    Task.find 1
    Task.find 1
    assert_equal 1, ActiveRecord::Base.connection.query_cache.length
  }
  mw.call({})
end

Вы можете сделать что-то вроде следующего:

def check_number_of_queries
  mw = ActiveRecord::QueryCache.new lambda { |env|
    # Assuming this object is set up to perform all its operations already
    MyObject.first.do_something_and_perform_side_operations
    puts ActiveRecord::Base.connection.query_cache.length.to_s
  }
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...