SakuraWi - BLog

WEBエンジニア。聴いたお話をまとめておく倉庫的な。スタックストックスタック!

【Ruby on Rails】Rspecで行数を指定してテストを実行する方法


Ruby on RailsのテスティングフレームワークであるRspecを利用する際の行数を指定して実行する方法があります。

bundle exec rspec app/spec/test/test.rb:5

上記のように、最後に :10などのオプションを付与することで、その行のテストを実行することができます。

Rspecの行数指定のメリット

行数指定をするメリットとしては、テスト実行が早いことが一番のメリットかと思います。

必要な部分のテストだけを行うため、結果が返ってくるのも早いですし、テストが通ったのかどうかという確認も早いです。

E2Eテストである、feature_specsystem_specは実行がかなり重く、1ファイル単位の実行を繰り返しているとあっという間に時間が経ってしまいます。

このような重いテストを繰り返す場合は行数指定で必要最低限のテストだけ実行することが非常に効果的です。

describeやcontext単位で指定してみよう

例えば、下記のテストがあったとします。

テスト全体を実行したい場合

bundle exec rspec app/spec/test/test.rb:1

bundle exec rspec app/spec/test/test.rb

上記のコマンドですべて実行されます。

discribe "#メソッドのテスト" do
  context "when 成功時" do
    it { expect().to eq "ひとつめのテスト") }
    it { expect().to eq "ふたつめのテスト") }
  end

  context "when 失敗時" do
    it { expect().to eq "ひとつめのテスト") }
    it { expect().to eq "ふたつめのテスト") }
  end
end

context単位で実行したい場合

contextの行数部分で指定しましょう。

例えば、 "when 成功時" で囲まれたテストの実行はこんなコマンドです。

bundle exec rspec app/spec/test/test.rb:2

これで実行してテストされるのは、 it節の二つです。 以下の部分がテストとして実行されます。

    it { expect().to eq "ひとつめのテスト") }
    it { expect().to eq "ふたつめのテスト") }

it節単位で実行したい場合

bundle exec rspec app/spec/test/test.rb:3

bundle exec rspec app/spec/test/test.rb:4

といった具体の指定でOKです。

Rspecの行数指定のテストまとめ

行数指定をすることで実行速度の向上、生産性の向上が狙えます!

ぜひ、利用してみてください。