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

# 抑制 rspec 警告

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

Published: 2020-10-13 · Topic: [ruby](https://oozou.com/zh-Hant/til-topics/ruby) ([markdown](https://oozou.com/zh-Hant/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-Hant/contact

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