🐥

RSpec のオプションを環境変数で制御する

2024/09/17に公開

RSpec を実行するときにオプションでいろいろな制御を行うことができます。
例えば --format オプションは RSpec の実行結果のフォーマットを制御することができます。

# test.rb
require "rspec"

RSpec.describe Array do
  describe "#size" do
    subject { array.size }

    let(:array) { [1, 2, "homu", :mami] }

    it { is_expected.to eq 4 }

    context "nil が混ざってる場合" do
      let(:array) { [nil, 2, nil, 4] }

      it { is_expected.to eq 4 }
    end

    context "空の配列の場合" do
      let(:array) { [] }

      it { is_expected.to eq 0 }
    end
  end
end
# デフォルトだとこういう出力になる
$ rspec test.rb
...

Finished in 0.00175 seconds (files took 0.05725 seconds to load)
3 examples, 0 failures

# --format documentation で以下のような出力形式になる
$ rspec test.rb --format documentation

Array
  #size
    is expected to eq 4
    nil が混ざってる場合
      is expected to eq 4
    空の配列の場合
      is expected to eq 0

Finished in 0.00118 seconds (files took 0.06279 seconds to load)
3 examples, 0 failures

他にもいろいろなオプションで制御することができます。

rspec コマンド以外でテストを実行するときに RSpec のオプションを制御したい

RSpec を実行するときに rspec コマンド以外で実行することもままあります。
例えば gem を開発しているときに rake spec でテストを実行することもあります。
このときに先程使用した --format documentation をそのまま渡してもうまく動きません。

$ rake spec --format documentation
invalid option: --format

当然なんですが rake spec はあくまでも rake コマンドを実行していることになるので --format documentationrake コマンドのオプションとして渡されます。
が、 rake には --format documentation なんでオプションはないのでエラーになります。

SPEC_OPTS 環境変数を利用する

こういう『内部では RSpec を実行しているけど実行するコマンドが異なる場合でもコマンドオプションで RSpec の挙動を制御したい』場合には環境変数 SPEC_OPTS が利用できます。
SPEC_OPTSrspec コマンドのオプションを利用することでそのオプションが反映された状態で RSpec が実行されます。

$ SPEC_OPTS="--format documentation" rake spec
# --format documentation が反映された状態で RSpec が実行される

単に環境変数として SPEC_OPTS が定義されていればいいのでいろいろと応用が聞きそうですねー。

GitHubで編集を提案

Discussion