🐥
RSpec のオプションを環境変数で制御する
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 documentation
も rake
コマンドのオプションとして渡されます。
が、 rake
には --format documentation
なんでオプションはないのでエラーになります。
SPEC_OPTS
環境変数を利用する
こういう『内部では RSpec
を実行しているけど実行するコマンドが異なる場合でもコマンドオプションで RSpec
の挙動を制御したい』場合には環境変数 SPEC_OPTS
が利用できます。
SPEC_OPTS
に rspec
コマンドのオプションを利用することでそのオプションが反映された状態で RSpec
が実行されます。
$ SPEC_OPTS="--format documentation" rake spec
# --format documentation が反映された状態で RSpec が実行される
単に環境変数として SPEC_OPTS
が定義されていればいいのでいろいろと応用が聞きそうですねー。
Discussion