2011-11-04 178 views
1

Rails 3.0.10,Ruby 1.9.2,ActiveSupport :: TestCaseRails测试:只记录失败/得到拆解结果?

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

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

我的方法是建立一个设置,将日志记录更改为字符串,并在发生故障时将字符串转储到STDOUT。

+0

编辑:我可以用self.method_name而不是@method_name得到测试名称。结果仍不清楚。 – Jan

回答

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 

对我来说工作正常。要小心,如果你有一个无限循环或类似的东西,你不会注意到这一点。