Rails 3.0.10,Ruby 1.9.2,ActiveSupport :: TestCase
我想打印到STDOUT失败的测试的日志部分(仅)。如果有一个我没找到的插件,请你好好告诉我。否则,我想知道:
我的方法是设置一个设置,将记录更改为字符串,并在失败时将字符串泵送到STDOUT。
答案 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
对我来说很好。请注意,如果你有无限循环或类似的东西,你就不会注意到这一点。