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

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.


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)

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


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.


1

Dans votre test.rb:

Rails.application.configure do
  ...
  config.logger = ActiveSupport::Logger.new(STDOUT)
end
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.