Comment activer la journalisation du débogage SQL pour ActiveRecord dans les tests RSpec?

92

J'ai quelques tests RSpec pour mes modèles et je voudrais activer la journalisation SQL ActiveRecord comme je le vois dans le mode serveur Rails. Comment faire ça?

Je commence mes tests avec

RAILS_ENV=test bundle exec rspec my/test_spec.rb

Merci

lzap
la source

Réponses:

55

Par défaut, toutes vos requêtes db seront déjà enregistrées en mode test. Ils seront dedans log/test.log.

idlefingers
la source
Ah je voulais le voir sur la console. Mais c'est assez juste.
lzap
21
Vous pouvez le regarder dans une console en utilisanttail -f log/test.log
idlefingers
342

Vous pouvez essayer de configurer l'enregistreur ActiveRecord sur stdout dans votre test quelque part. Si vous utilisez rspec, peut-être dans l'assistant de spécification?

ActiveRecord::Base.logger = Logger.new(STDOUT)
George
la source
3
Beaucoup plus utile si vous testez un gem avec seulement active_recordinclus car ceux-ci ne consignent pas le SQL par défaut.
Brendon Muir
Si vous utilisez IRuby (Jupyter pour Ruby), STDOUTa été remappé et vous devez utiliser à la $stdoutplace.
Ulysse BN
12

ensemble

config.log_level = :info 

dans l'environnement de test

Nicolai
la source
4
ou définissez-le sur config.log_level =: debug pour obtenir la sortie maximale, y compris chaque instruction SQL exécutée
Zack Xu
9

si d'autres réponses ne fonctionnent pas dans votre cas, veuillez vérifier le «niveau de journalisation» de votre environnement de test.

sa valeur par défaut est «debug», qui affichera le SQL généré par Rails. s'il était défini sur "info", le SQL sera manquant.

Siwei Shen 申思维
la source
1

Dans votre test.rb:

Rails.application.configure do
  ...
  config.logger = ActiveSupport::Logger.new(STDOUT)
end
Père Joan Martorell
la source