RubyやRails、RspecでENVを扱う時に気をつけること

更新: 2024/04/25, 作成: 2024/04/25

みなさんこんにちは、かじりです。RubyでENVを扱う時に気をつけることをまとめました

今回私はRspecでENV1を扱う時に、次のようにしました。

ENV['variable'] = 1

これでは問題があり、これ以降のテストでも同じ値が使われていました。

今回の場合、こちらの記事2のようにするとうまくいきました。

before do
  allow(ENV).to receive(:[]).and_call_original
  allow(ENV).to receive(:[]).with('variable').and_return(1)
end

このようにすると、ENV['variable']の場合は1を返し、それ以外はオリジナルの動作をします。

また、先ほどの記事にENVから値を取得するときに気をつけることが書いてあります。

ENV.fetch('variable')

これには利点があって、環境変数にvariableが未定義の場合にエラーになります3

ENV['variable']だとエラーがでません。また、以下のように未定義の場合の動作を設定することもできます。

ENV.fetch('variable', nil)

これで未定義の場合はnilになります。

脚注

  1. https://docs.ruby-lang.org/ja/latest/class/ENV.html#S_--5B--5D

  2. https://spirits.appirits.com/doruby/9473/

  3. https://docs.ruby-lang.org/ja/latest/class/ENV.html#S_FETCH