bra*_*ing 4 logging controller rspec ruby-on-rails filter
假设我有一个前置过滤器的控制器.在控制器测试中,代码永远不会到达#create方法,尽管在我发布的规范中:create.就我而言,就是这样
before_filter:user_signed_in
没有验证,但测试日志没有表明这一点,所以我不得不通过依次打开/关闭所有过滤器来解决这个问题.是否有可能让Rails进行一些详细的日志记录,因为它依次处理每个过滤器并将其输出到测试日志?
小智 5
这就是我如何解决同样的问题.我确信下面的代码仍然可以进行很多改进,并可能放入它自己的模块中.改进很好.
您需要将以下代码放入顶部ActionController,通常是ApplicationController或您需要跟踪的控制器:
class ApplicationController < ActionController::Base
def self.before_filter_with_logging(*arguments, &block)
filters, conditions =
ActionController::Filters::FilterChain.extract_options(arguments, &block)
filter_method_names = filters.map { |fm| fm.to_s }.join(', ')
logger.info "Setting up before_filter to #{filter_method_names}"
filter_methods_with_logging =
filters.map { |fm| (fm.to_s + "_with_logging").to_sym }
filters.each { |fm|
define_method( (fm.to_s + "_with_logging").to_sym ) { |*args|
logger.info "Calling before_filter #{fm}"
if args.empty?
send fm
else
send fm, args
end
}
}
before_filter_without_logging(filter_methods_with_logging, &block)
end
class << self
alias_method_chain :before_filter, :logging
end
before_filter :your_first_before_filter
TomášPospíšek
| 归档时间: |
|
| 查看次数: |
3774 次 |
| 最近记录: |