如何在 RSpec 测试中为 ActiveRecord 打开 SQL 调试日志记录?
Posted
技术标签:
【中文标题】如何在 RSpec 测试中为 ActiveRecord 打开 SQL 调试日志记录?【英文标题】:How do I turn on SQL debug logging for ActiveRecord in RSpec tests? 【发布时间】:2011-07-11 19:08:06 【问题描述】:我对我的模型进行了一些 RSpec 测试,我想打开 SQL ActiveRecord 日志记录,就像我在 Rails 服务器模式中看到的那样。该怎么做?
我的测试开始于
RAILS_ENV=test bundle exec rspec my/test_spec.rb
谢谢
【问题讨论】:
【参考方案1】:默认情况下,您的所有数据库查询都将在测试模式下记录。他们将在log/test.log
。
【讨论】:
啊,我是想在控制台上看到它。但这很公平。 您可以使用tail -f log/test.log
在控制台中观看
我还没有意识到这很容易,所以最后添加了一行来从 ActiveSupport 中转储所有工具:ActiveSupport::Notifications.subscribe do |*args| puts *args end
【参考方案2】:
您可以尝试在某处的测试中将 ActiveRecord 记录器设置为标准输出。如果您正在使用 rspec,也许在规范助手中?
ActiveRecord::Base.logger = Logger.new(STDOUT)
【讨论】:
如果您正在测试仅包含active_record
的 gem 会更有帮助,因为这些默认情况下不会记录 SQL。
如果您使用的是 IRuby(Jupyter for Ruby),STDOUT
已被重新映射,您应该改用 $stdout
。【参考方案3】:
如果其他答案不适用于您的情况,请检查您的测试环境的“日志级别”。
它的默认值是'debug',它将输出Rails 生成的SQL。如果设置为“info”,则 SQL 将丢失。
【讨论】:
【参考方案4】:设置
config.log_level = :info
在测试环境中
【讨论】:
或将其设置为 config.log_level = :debug 以获得最大输出,包括执行的每个 SQL 语句 这是什么配置?正如人们所料,我得到“未定义的局部变量或方法'config' for main:Object”。 编辑: 嗯,这是 Rails 的东西,而不是 ActiveRecord 的东西,nvm...【参考方案5】:在你的test.rb
:
Rails.application.configure do
...
config.logger = ActiveSupport::Logger.new(STDOUT)
end
【讨论】:
以上是关于如何在 RSpec 测试中为 ActiveRecord 打开 SQL 调试日志记录?的主要内容,如果未能解决你的问题,请参考以下文章