Rails 7 Rspec中filter_parameters出现未配置项的异常问题
Rails 7 RSpec中filter_parameters出现额外项的解决办法
在Rails 7项目里遇到个奇怪问题:同样执行Rails.application.config.filter_parameters,控制台返回的是预期的参数列表:[:card_number, :cvv, :expiry_month, :expiry_year, :number, :password, :password_confirmation, :token]
但在RSpec测试环境里跑,结果多了个没在config/initializers/filter_parameter_logging.rb里配置的"encrypted_rich_text.body"。
问题原因
这个额外的参数项基本是富文本相关的gem(比如Action Text或者第三方富文本处理库)自动添加的。RSpec的环境加载流程和控制台不一样,有些gem的初始化钩子会在测试环境里触发敏感参数自动过滤的逻辑,而控制台环境没触发或者加载顺序不同,就导致了差异。
解决办法
1. 手动强制覆盖参数列表
在spec/rails_helper.rb或者spec/spec_helper.rb的RSpec配置块里,加一段代码在测试套件启动前重置filter_parameters,直接覆盖掉自动添加的项:
RSpec.configure do |config| # 其他配置代码... config.before(:suite) do Rails.application.config.filter_parameters = [:card_number, :cvv, :expiry_month, :expiry_year, :number, :password, :password_confirmation, :token] end end
2. 找到自动添加的源头并禁用
- 全局搜索项目里所有调用
filter_parameters <<或者filter_parameters.add的代码,定位到添加"encrypted_rich_text.body"的位置 - 检查你用的富文本gem的文档,看有没有默认添加敏感参数的配置,比如如果是Action Text,看看能不能关闭这个自动行为(具体以gem文档为准)
3. 调整初始化文件加载顺序
把你的filter_parameter_logging.rb重命名成带后缀的,比如zzz_filter_parameter_logging.rb,让它在所有gem的初始化文件之后加载,这样自定义的配置就能覆盖gem的默认设置。
内容的提问来源于stack exchange,提问作者Ghanshyam Anand
相关产品推荐
相关产品推荐

