【问题标题】:How do I turn on SQL debug logging for ActiveRecord in RSpec tests?如何在 RSpec 测试中为 ActiveRecord 打开 SQL 调试日志记录?
【发布时间】:2011-07-11 19:08:06
【问题描述】:

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

我的测试开始于

RAILS_ENV=test bundle exec rspec my/test_spec.rb

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby activerecord rspec-rails


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-28
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多