RSpecで特定のテストだけを実行したいときの設定

はじめに

RSpecで特定のテストだけを実行したいときについて

$ rspec spec/system/task_spec.rb:10

上記のようにファイル名とテストしたい行を指定すれば、特定のテストだけを実行できますが、

次の設定をすることでもっと簡単に呼び出せます。

設定方法

RSpec.configure do |config|
  config.filter_run_when_matching :focus  # ← ここ
end

デフォルトでは上記の行がコメントアウトされているので、それを外すだけで設定できます。

だいたい50行目あたりに記述があります。

特定のテストだけを実行する

上記の設定をしたら、テストファイル内の'describe', や 'it'などの前に'f'をつけることで、特定のテストだけを実行できます。

RSpec.describe 'Task', type: :system do
  describe 'Task新規作成' do
    context '正常系' do
      fit 'Taskが新規作成されること' do  # ← 実行される
        
      end
    end
  end

  describe 'Task詳細' do
    context '正常系' do
      it 'Taskが表示されること' do # ← 実行されない
        
      end
    end
  end
end

また下記のように「focus」を使うやり方もあります。

RSpec.describe 'Task', type: :system do
  describe 'Task新規作成' do
    context '正常系' do
      it 'Taskが新規作成されること' do  # ← 実行されない
        
      end
    end
  end

  describe 'Task詳細' do
    context '正常系' do
      it 'Taskが表示されること', focus: true do # ← 実行される
        
      end
    end
  end

  describe 'Task一覧' do
    context '正常系' do
      it '一覧ページにアクセスした場合、Taskが表示されること', :focus do  # ← 実行される

      end
    end
  end
end

最後に

これで'f'をつけるだけで、特定のテストだけを実行できるようになりました。

これなら複数のテストを実行したいときにも便利です。

また、自分はよくやってしまうのですが、'f'を消し忘れてしまうことがあるので気をつけましょう!