如何在测试中关闭Rails SQL日志记录?

时间:2014-02-15 02:15:43

标签: ruby-on-rails unit-testing logging ruby-on-rails-4

由于某种原因(可能是更新的gem),Rails现在正在记录我的所有SQL命令。我运行自动测试,他们在测试期间也被发送垃圾邮件。我该如何关闭它?

我尝试将此添加到config / environments / test.rb但它不起作用。 logger已经nil

# ActiveRecord::Base.logger = nil
# ActiveRecord::Base.logger.level = 1

Rails 4.0.0

3 个答案:

答案 0 :(得分:13)

好的,我找到了。这很有效:

config.after_initialize do
  ActiveRecord::Base.logger = nil
end

答案 1 :(得分:2)

您可以做的另一件事是在运行时调用此代码,它不需要在配置文件中。

例如,如果您输入特定的测试用例

# test/functionals/application_controller_test.rb for example
ActiveRecord::Base.logger = nil

它也可以正常工作,这样你就可以在运行时切换它。如果您只想扼杀几行代码或块,这很有用。

答案 2 :(得分:2)

如果有人想要实际淘汰SQL语句日志记录(不更改日志记录级别,同时保持其AR模型的日志记录):

写入日志的行(无论如何,在Rails 3.2.16中)是调用' debug'在lib / active_record / log_subscriber.rb中:50。

该调试方法由ActiveSupport :: LogSubscriber定义。

所以我们可以通过覆盖它来淘汰日志:

module ActiveSupport
  class LogSubscriber
    def debug(*args, &block)
    end
  end
end