gpt4 book ai didi

rspec-rails - 如何配置 Rspec deprecation_stream 以便将弃用警告记录到文件中?

转载 作者:行者123 更新时间:2023-12-05 06:59:49 32 4
gpt4 key购买 nike

在即将升级到 5.1 的 Rails 5.0.7 应用程序中,我们希望将所有(许多)弃用警告捕获到一个文件中。

Rspec 3.9 提供了一个非常清晰的示例,说明如何将弃用信息发送到文本文件: https://relishapp.com/rspec/rspec-core/v/3-9/docs/configuration/custom-deprecation-stream

但它不起作用:

# spec/spec_helper.rb
RSpec.configure do |config|
config.deprecation_stream = File.open('deprecations.txt', 'w')
end

当我运行一个有警告的规范没有上面的代码时,stdout 显示一堆实例:弃用警告:uniq 已弃用,将从 Rails 5.1 中删除(改为使用 distinct)(调用自...

如果我在上面添加 config.deprecation_stream 代码,并重新运行相同的规范:

  1. 随着规范的运行,弃用警告不再显示在标准输出上
  2. 文件 deprecations.txt 已创建,但是
  3. 文件是空白的。

如何配置 Rspec 的 deprecation_stream 使其按预期工作,例如,将所有弃用警告发送到文件?

最佳答案

要捕获 Rails 弃用消息,您可以使用 active_support.deprecation选项:

# config/environments/test.rb
config.active_support.deprecation = ->(message, callstack, deprecation_horizon, gem_name) {
# Do anything you want with the deprecation (append to a file, send to an external service, etc.)
puts "!!! [#{gem_name}] #{message}", callstack[0..2]
}

这将产生如下输出:

!!! [Rails] DEPRECATION WARNING: ActiveRecord::Base.allow_unsafe_raw_sql= is deprecated and will be removed in Rails 6.2 (called from old_method at /my_project/app/models/post.rb:36)
/my_project/app/models/post.rb:36:in `old_method'
/my_project/spec/models/post_spec.rb:36:in `block (3 levels) in <main>'
/my_gems/rspec-core-3.10.1/lib/rspec/core/memoized_helpers.rb:317:in `block (2 levels) in let'

RSpec deprecation_stream 对于 RSpec 的弃用很有用。从文档中,一个例子可以是:

class Foo
def bar
RSpec.deprecate "Foo#bar"
end
end

关于rspec-rails - 如何配置 Rspec deprecation_stream 以便将弃用警告记录到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64313388/

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