1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/panda26-gitlab

Клонировать/Скачать
query_recorder.md 3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 26.05.2025 02:09 64486eb

QueryRecorder

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), но это следует избегать, если это возможно.## См. также

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/panda26-gitlab.git
git@api.gitlife.ru:oschina-mirror/panda26-gitlab.git
oschina-mirror
panda26-gitlab
panda26-gitlab
master