読者です 読者をやめる 読者になる 読者になる

テストのとき、定数を再代入した時のwarningを止めたい

Ruby Rails RSpec

Rubyに定数を再代入すると、warningが出ます。
(あたりまえというか、本来は定数は代入できない)
ですが、テストのために代入したいという場合があります。
その場合は、

  it "StatusView=trueでget('index')adminはsuccess" do
    StatusView=true
    session[:user]=users(:fujioka)
    get 'index'
    response.should be_success
  end
  it "StatusView=trueでget('index')managerはsuccess" do
    StatusView=true
    session[:user]=users(:manager)
    get 'index'
    response.should be_success
  end

こんなのを書くと、

ってな感じで、warningがうざいのですが、
remove_constで定数を削除してあげると、代入可能になります。
privateメソッドだと思うので、Object.sendで呼び出します。

  before do
    Object.send(:remove_const,"StatusView") if defined?(StatusView)
  end

こんな感じでテストメソッドごとに呼び出されるように書くと、

きれいにテストが通るようになって気持ちいいです。
ちなみに、warningを消したいといった時に

eban: $VERBOSE=nil
unak: stdoutを殺す

という意見がありました。今回は定数だけの影響に
とどめておきたいので、remove_constでいいでしょう。