Rails测试:只有失败/获取结果的日志?

时间:2011-11-04 10:22:38

标签: ruby-on-rails testcase

Rails 3.0.10,Ruby 1.9.2,ActiveSupport :: TestCase

我想打印到STDOUT失败的测试的日志部分(仅)。如果有一个我没找到的插件,请你好好告诉我。否则,我想知道:

  • 如何在拆解中获得结果(通过,失败,错误)?在类似的问题中,建议覆盖所有断言方法以挽救异常,但我不太喜欢这种方法。

我的方法是设置一个设置,将记录更改为字符串,并在失败时将字符串泵送到STDOUT。

1 个答案:

答案 0 :(得分:2)

这些方法在拆解方法中都可以正常工作:

self.passed?
self.class.name
self.method_name

因此在设置中,您可以保存旧的记录器并创建一个记录到字符串缓冲区的新记录器:

@old_logger = Rails.logger
@old_ar_logger = ActiveRecord::Base.logger
@current_buffer = StringIO.new
Rails.logger = Logger.new(@current_buffer)
ActiveRecord::Base.logger = Rails.logger

在拆解时,重置记录器,测试通过?如果没有,则转储缓冲日志:

Rails.logger = @old_logger
ActiveRecord::Base.logger = @old_ar_logger
unless self.passed?
  @current_buffer.close_write
  STDOUT << @current_buffer.string
  @current_buffer.close
end

对我来说很好。请注意,如果你有无限循环或类似的东西,你就不会注意到这一点。