【问题标题】:how do I get my logger messages to go to a file when testing a controller with rspec?使用 rspec 测试控制器时,如何让我的记录器消息转到文件?
【发布时间】:2012-01-13 00:13:05
【问题描述】:

我正在使用 Rspec2 和 Watchr 来测试控制器的帖子,如下所示:

...
 post :add_item, :add_item=> { "price" => price.to_s, "product_line" => line }
 # puts " response: "  + response.body
 response.should be_success
...    

我收到了回复,看起来不错,但由于某种原因,这个回复没有给我“成功”的回复。我试图找出原因。为此,如果我能看到我的日志,那将非常有帮助。我可以看到日志正在初始化并指向正确的位置,因为当我的环境启动时,我有这个:

Loading environment: test
Logger: #<ActiveSupport::BufferedLogger:0xa201b24 @level=0, @buffer={},         
  @auto_flushing=1, @guard=#<Mutex:0xa201728>, 
  @log=#<File:/mnt/hgfs/the_app/log/test.log>, @namespace="">
Database: the_app_test

看起来很正常——我所有的 mongodb 调用都被记录了,但 RSpec 似乎正在重定向记录器调用。这是日志中未显示的示例:

logger.debug "Params #{params.inspect}"(此行就在控制器中的 def 之后)

我检查了我的环境 rb 文件,没有看到任何可以解释这一点的东西。有没有办法让 rspec 控制器生成的消息转到他们自己的日志文件? Rspec 是否正在重定向我的日志记录输出?

read this blog post,但它已经过时了,所以我不确定它是否会有所帮助。 Rails 遇到过问题。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 testing rspec rspec2


    【解决方案1】:

    快速但丑陋的方法:将logger = Rails::logger 放在控制器方法的顶部。不确定这是否会破坏正常的日志记录。

    然后放

    config.before(:suite) do
    Rails::logger  =
        ActiveSupport::BufferedLogger.new(File.join(Rails.root,
        "log", "rspec_env_#{Rails.env}.log"),
        ActiveSupport::BufferedLogger::Severity::DEBUG)
    

    在我的 spec_helper.rb 中。这两个将导致 rspec 记录器调用转到“rspec_env_test.log”等。

    有人有更好的方法吗?

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多