🙄

RSpec でテストの実行順をランダムにする

2024/09/18に公開

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回目で実行順が変わっていることがわかると思います。

参照

GitHubで編集を提案

Discussion