QueryRecorder — это инструмент для обнаружения проблемы N+1 запросов в тестах.
Реализован в spec/support/query_recorder.rb через 9c623e3e
Как правило, pull requests не должны увеличивать количество запросов. Если вы обнаруживаете, что добавляете что-то вроде .includes(:автор, :назначенный)
, чтобы избежать N+1
запросов, рассмотрите возможность использования QueryRecorder для обеспечения этого с помощью теста. Без этого новая функция, которая вызывает доступ к дополнительному модели, будет незаметно воспроизводить проблему.
Этот тип теста работает путем подсчета количества SQL-запросов, выполненных ActiveRecord. Сначала берется контрольное значение, затем добавляются новые записи в базу данных и значение пересчитывается. Если количество запросов значительно увеличилось, то проблема N+1
запросов существует.
it "избегает N+1 запросов к базе данных" do
control_count = ActiveRecord::QueryRecorder.new { visit_some_page }.count
create_list(:issue, 5)
expect { visit_some_page }.not_to exceed_query_limit(control_count)
end
Например, вы можете создать 5 задач между значениями, что приведет к увеличению количества запросов на 5, если проблема N+1
существует.> Примечание: В некоторых случаях количество запросов может незначительно изменяться между запусками по независимым причинам. В этом случае вы можете протестировать exceed_query_limit(control_count + acceptable_change)
, но это следует избегать, если это возможно.## См. также
N+1
запросамиВы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )