ChatGPT解决这个技术问题 Extra ChatGPT

如何在 RSpec 测试中为 ActiveRecord 打开 SQL 调试日志记录?

我对我的模型进行了一些 RSpec 测试,我想打开 SQL ActiveRecord 日志记录,就像我在 Rails 服务器模式中看到的那样。怎么做?

我开始我的测试

RAILS_ENV=test bundle exec rspec my/test_spec.rb

谢谢


G
George

您可以尝试在某处的测试中将 ActiveRecord 记录器设置为标准输出。如果您正在使用 rspec,也许在规范助手中?

ActiveRecord::Base.logger = Logger.new(STDOUT)

如果您正在测试仅包含 active_record 的 gem,则更有帮助,因为默认情况下它们不会记录 SQL。
如果您使用的是 IRuby(用于 Ruby 的 Jupyter),则 STDOUT 已重新映射,您应该改用 $stdout
p
philippe_b

默认情况下,您的所有数据库查询都将在测试模式下记录。他们将在 log/test.log


啊,我的意思是在控制台上看到它。但这已经足够公平了。
您可以使用 tail -f log/test.log 在控制台中观看
我还没有意识到这很容易,所以最后添加了一行来从 ActiveSupport 中转储所有工具:ActiveSupport::Notifications.subscribe do |*args| puts *args end
N
Nicolai

config.log_level = :info 

在测试环境中


或将其设置为 config.log_level = :debug 以获得最大输出,包括执行的每个 SQL 语句
这是什么配置?正如人们所料,我得到“未定义的局部变量或方法'config' for main:Object”。编辑:啊,这是 Rails 的东西,而不是 ActiveRecord 的东西,nvm...
S
Siwei

如果其他答案在您的情况下不起作用,请检查您的测试环境的“日志级别”。

它的默认值为'debug',它将输出Rails 生成的SQL。如果设置为“info”,则 SQL 将丢失。


P
Pere Joan Martorell

在您的 test.rb 中:

Rails.application.configure do
  ...
  config.logger = ActiveSupport::Logger.new(STDOUT)
end