🙄
RSpec でテストの実行順をランダムにする
RSpec でテストを書くときは基本的にテストの実行順に依存しないようにテストを書いていると思います。
とはいえ、本当にその限りではないので CI などで回るときには実行順をランダムでにしてテストを実行したいこととかがあると思います。
そういう場合に --order
オプションでランダムに実行するように指定することができます。
# test.rb
require "rspec"
RSpec.describe Array do
describe "#at" do
subject { array.at(nth) }
let(:array) { ["homu", "mami", "mado"] }
context "`0` を渡した場合" do
let(:nth) { 0 }
it { is_expected.to eq "homu" }
end
context "`1` を渡した場合" do
let(:nth) { 1 }
it { is_expected.to eq "mami" }
end
context "`5` を渡した場合" do
let(:nth) { 5 }
it { is_expected.to eq nil }
end
context "`-1` を渡した場合" do
let(:nth) { -1 }
it { is_expected.to eq "mado" }
end
context "`-2` を渡した場合" do
let(:nth) { -2 }
it { is_expected.to eq "mami" }
end
context "`-5` を渡した場合" do
let(:nth) { -5 }
it { is_expected.to eq nil }
end
context "引数に数値以外の価を渡した場合" do
let(:nth) { "0" }
it { expect { subject }.to raise_error TypeError }
end
end
end
# --order に random を指定することで実行順がランダムになる
$ rspec --order random --format documentation test.rb
Randomized with seed 63707
Array
#at
`1` を渡した場合
is expected to eq "mami"
`5` を渡した場合
is expected to eq nil
引数に数値以外の価を渡した場合
is expected to raise TypeError
`-5` を渡した場合
is expected to eq nil
`0` を渡した場合
is expected to eq "homu"
`-1` を渡した場合
is expected to eq "mado"
`-2` を渡した場合
is expected to eq "mami"
Finished in 0.00595 seconds (files took 0.06258 seconds to load)
7 examples, 0 failures
Randomized with seed 63707
$ rspec --order random --format documentation test.rb
Randomized with seed 43686
Array
#at
`-2` を渡した場合
is expected to eq "mami"
引数に数値以外の価を渡した場合
is expected to raise TypeError
`1` を渡した場合
is expected to eq "mami"
`0` を渡した場合
is expected to eq "homu"
`-5` を渡した場合
is expected to eq nil
`5` を渡した場合
is expected to eq nil
`-1` を渡した場合
is expected to eq "mado"
Finished in 0.0023 seconds (files took 0.0629 seconds to load)
7 examples, 0 failures
Randomized with seed 43686
1回目と2回目で実行順が変わっていることがわかると思います。
Discussion