gpt4 book ai didi

ruby-on-rails - 如何在 rspec Controller 测试期间记录 rails Controller 过滤器

转载 作者:行者123 更新时间:2023-12-04 06:20:49 26 4
gpt4 key购买 nike

假设我有一个带有许多前置过滤器的 Controller 。在 Controller 测试中,尽管在我发布的规范中,代码永远不会到达#create 方法:create。就我而言,就是这样

before_filter :user_signed_in

没有验证,但测试日志没有表明这一点,所以我不得不通过依次打开/关闭所有过滤器来弄清楚。是否可以让 Rails 在依次处理每个过滤器并将其输出到测试日志时进行一些详细的日志记录?

最佳答案

以下是我如何解决同样的问题。我确信下面的代码仍然可以改进很多,并可能放入它自己的模块中。改进欢迎。

您需要将以下代码放入顶级 ActionController,通常是 ApplicationController 或您需要跟踪的任何 Controller :

类 ApplicationController < ActionController::Base

def self.before_filter_with_logging(*arguments, &block)
过滤器,条件 =
ActionController::Filters::FilterChain.extract_options(arguments, &block)
filter_method_names = 过滤器.map { |fm| fm.to_s }.join(', ')
logger.info "将 before_filter 设置为 #{filter_method_names}"

filter_methods_with_logging =
过滤器.map { |fm| (fm.to_s + "_with_logging").to_sym }

过滤器.每个 { |fm|
define_method( (fm.to_s + "_with_logging").to_sym ) { |*args|
logger.info "调用 before_filter #{fm}"

如果 args.empty?
发送调频
别的
发送调频,参数
结尾
}
}
before_filter_without_logging(filter_methods_with_logging, &block)
结尾

类<<自我
alias_method_chain :before_filter, :logging
结尾

before_filter :your_first_before_filter

托马斯·波斯皮谢克

关于ruby-on-rails - 如何在 rspec Controller 测试期间记录 rails Controller 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com