我正在寻找一种在运行我的规范时 suppress Ruby警告的方法.

spec spec/models/account_spec.rb

我收到如下警告:

DEPRECATION WARNING: ActiveSupport::Dependencies.load_paths is deprecated, ...
warning: already initialized constant SOME_CONSTANT_NAME

使用ActiveSupport::Deprecation.silenced = true删除ActiveSupport警告非常容易.

作为spec命令的一部分,如何防止已初始化的持续警告?或者通过创建另一个spec文件来 suppress 此类警告.请记住,这些警告来自gem文件,因此我不能进入这些文件并用Kernel.silence_warnings包围它们.

Note:

推荐答案

如果直接使用ruby命令而不是spec wrapper运行spec,则可以使用-W命令行选项来消除警告:

$ ruby --help
[...]
  -W[level]       set warning level; 0=silence, 1=medium, 2=verbose (default)

所以在你的情况下:

$ ruby -W0 -Ispec spec/models/event_spec.rb

不应向您显示任何警告.

或者,可以在加载gems之前设置$VERBOSE=nil,即在环境顶部.rb(如果你在Rails 3上,也可以是application.rb).请注意,这会一直禁用所有警告.

或者,因为您使用的是Rails,所以应该能够使用内核.禁止Bundle 机周围的警告.如果使用Bundler,则需要阻止:

Kernel.silence_warnings do
  Bundler.require(:default, Rails.env) if defined?(Bundler)
end

更具 Select 性的是,仅为加载特定gem设置$VERBOSE:

config.gem 'wellbehaving_gem'
original_verbosity = $VERBOSE
$VERBOSE = nil
config.gem 'noisy_gem_a'
$VERBOSE = original_verbosity

Ruby-on-rails相关问答推荐

Rails HotWire和View Components:涡轮框架不会取代内容

如何将POST-CSSS-IMPORT与TRANWIND-RACKS和IMPORT映射一起使用

使用拆分成多个部分的种子文件进行Rails数据种植

Rspec期望()与期望{}

如何在 Ruby on Rails 中正确存储 BigDecimal

在 Rails 中进行 Http 基本身份验证

显示每个 rspec 示例的运行时

来自控制台的 ActionCable.server.broadcast

你能从 Heroku dynos/workers 中获得多少性能?

Rails:保存子对象时更新父对象

Rails 3:如何正确显示textarea中的文本?

使用 jQuery 在 Rails 中不显眼的动态表单字段

是否有不涉及删除 Gemfile.lock 的在任何源中找不到 *gem*错误的修复?

rmagick 和 OS X Lion

在 Rails 中复制模型实例

在 Rails 应用程序中处理大文件上传的最佳方法是什么?

Rails 4,Capistrano 3.0.0,无法加载这样的文件 - 部署

Mongoid OR 查询语法

Rails - 如何在用户登录时覆盖设计 SessionsController 以执行特定任务?

Ruby 更新后:测试失败,assets资源 未声明为在生产中预编译