---
title: "抑制 rspec 警告"
description: "$ RUBYOPT=W0 bundle exec rspec spec/ ..."
canonical: https://oozou.com/til/suppress-rspec-warnings-33
locale: zh-Hans
date: 2020-10-13
topic: ruby
---

# 抑制 rspec 警告

> $ RUBYOPT=W0 bundle exec rspec spec/ ...

Published: 2020-10-13 · Topic: [ruby](https://oozou.com/zh-Hans/til-topics/ruby) ([markdown](https://oozou.com/zh-Hans/til-topics/ruby.md))

```shell
$ RUBYOPT=W0 ./bin/rspec spec/
...

$ RUBYOPT=W0 bundle exec rspec spec/
...

$ RUBYOPT=W0 rspec
...

$ RUBYOPT=W0 ...
...
```

RSpec 警告会弄乱你的测试输出，让 log 更难阅读，在大型 Rails 项目中尤其如此。下面介绍如何在保持工作流程清爽的同时，有效地抑制这些警告。

# 全局抑制警告

把下面这行加到 spec\_helper.rb 或 rails\_helper.rb，就能为整个测试套件禁用警告：

```
$VERBOSE = nil
```

适用场景：适合快速让所有警告安静下来，但它可能会掩盖 app 和依赖包中的重要信息。

# 抑制特定警告

把会产生警告的代码包在一个抑制用的代码块里：

```
def suppress_warnings 
original_verbose = $VERBOSE 
$VERBOSE = nil 
yield 
ensure 
$VERBOSE = original_verbose 
end 

suppress_warnings do 
require 'some_gem_with_warnings' 
end
```

**适用场景**：适合把警告隔离在特定的依赖包或代码块里。

# 抑制 RSpec 警告

RSpec 内置了管理自身警告的设置。把这段加到你的 spec\_helper.rb：

```
RSpec.configure do |config| 
config.warnings = false 
end
```

**适用场景**：只抑制 RSpec 本身的警告，同时保留 Ruby 和依赖包的警告。

# 重定向 deprecation 警告

对于 deprecation 警告，可以把它们重定向到 log 文件，以便日后查看：

```
RSpec.configure do |config| 
config.deprecation_stream = File.open('log/rspec_deprecations.log', 'w') 
end
```

适用场景：保持测试输出干净，同时仍能掌握 deprecation 的状况。

# 按环境抑制警告

只在特定环境（例如 CI）抑制警告：

```
$VERBOSE = nil if ENV['SUPPRESS_WARNINGS'] == 'true'
```

适用场景：本地开发时保留警告，但在 CI 中隐藏，让 log 更干净。

根据自身需求组合这些做法，你就能让测试输出保持干净、有用，提升开发和 CI 工作流程的效率。

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/zh-Hans/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
