Как включить ведение журнала отладки SQL для ActiveRecord в тестах RSpec?

93

У меня есть несколько тестов RSpec для моих моделей, и я хотел бы включить ведение журнала SQL ActiveRecord так же, как я это вижу в режиме сервера Rails. Как это сделать?

Я начинаю свои тесты с

RAILS_ENV=test bundle exec rspec my/test_spec.rb

Благодарность

lzap
источник

Ответы:

54

По умолчанию все ваши запросы к базе данных будут регистрироваться уже в тестовом режиме. Они будут внутри log/test.log.

праздные пальцы
источник
Ах, я хотел увидеть это на консоли. Но это справедливо.
lzap 09
21
Вы можете посмотреть это в консоли, используяtail -f log/test.log
idlefingers 09
346

Вы можете попробовать установить для регистратора ActiveRecord значение stdout в вашем тесте. Если вы используете rspec, может быть, в помощнике по спецификации?

ActiveRecord::Base.logger = Logger.new(STDOUT)
Джордж
источник
3
Намного более полезно, если вы тестируете драгоценный камень только с active_recordвключенным, поскольку они не регистрируют SQL по умолчанию.
Brendon Muir
Если вы используете IRuby (Jupyter для Ruby), STDOUTон был переназначен, и вы должны использовать $stdoutвместо него.
Ulysse BN
12

задавать

config.log_level = :info 

в тестовой среде

Николай
источник
4
или установите для него значение config.log_level =: debug, чтобы получить максимальный результат, включая каждый выполненный оператор SQL
Зак Сю,
9

если другие ответы не работают в вашем случае, проверьте «уровень журнала» вашей тестовой среды.

по умолчанию он «отладка», который выводит SQL, сгенерированный Rails. если он был установлен в "info", SQL будет отсутствовать.

Сивэй Шэнь 申思维
источник
1

В вашем test.rb:

Rails.application.configure do
  ...
  config.logger = ActiveSupport::Logger.new(STDOUT)
end
Пере Джоан Марторелл
источник