[Rspec] 実行するテストケースを限定する方法

学習記録

はじめに

あるテストケースだけを検証したい場合、いちいち全体のテストが走るのを待っているのは時間がかかって面倒です。
特定のテストだけを検証したい場合に便利な方法があります。

spec_helper.rbを編集する

52行目辺り=beginという記述があるので探してください。
これをconfig.filter_run_when_matching :focusの下辺りまでズラしてコメントアウトを外しましょう。

RSpec.configure do |config|
------------一部省略-----------------
=begin
  # This allows you to limit a spec run to individual examples or groups
  # you care about by tagging them with `:focus` metadata. When nothing
  # is tagged with `:focus`, all examples get run. RSpec also provides
  # aliases for `it`, `describe`, and `context` that include `:focus`
  # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
  config.filter_run_when_matching :focus

  # Allows RSpec to persist some state between runs in order to support
-------------一部省略---------------------------
  Kernel.srand config.seed
=end
end

下記のように=beginの位置をずらします。

RSpec.configure do |config|
------------一部省略-----------------
  # This allows you to limit a spec run to individual examples or groups
  # you care about by tagging them with `:focus` metadata. When nothing
  # is tagged with `:focus`, all examples get run. RSpec also provides
  # aliases for `it`, `describe`, and `context` that include `:focus`
  # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
  config.filter_run_when_matching :focus
=begin
  # Allows RSpec to persist some state between runs in order to support
-------------一部省略---------------------------
  Kernel.srand config.seed
=end
end

使い方

describe、content、itなどのテストブロックの頭にfを付けるだけで、そのテストブロックのみが実行されるようになります。

RSpec.describe 'Users', type: :system do
  describe 'ログイン前' do
    describe 'ユーザー新規登録' do
      context 'フォームの入力値が正常' do
        it 'ユーザーの新規作成が成功する' do
          # テストは省略
        end
      end
      context 'メールアドレスが未入力' do
        # 実行したいテストブロックに f をつける。
        fit 'ユーザーの新規作成が失敗する' do
          # テストは省略
        end
      end
      context '登録済のメールアドレスを使用' do
        it 'ユーザーの新規作成が失敗する' do
          # テストは省略
        end
      end
    end
 
    describe 'マイページ' do
      context 'ログインしていない状態' do
        it 'マイページへのアクセスが失敗する' do
          # テストは省略
        end
      end
    end
> bundle exec rspec spec/system/users_spec.rb                                                                    ?03_system_spec
Run options: include {:focus=>true}

Users
  ログイン前
    ユーザー新規登録
      メールアドレスが未入力
2021-10-27 13:57:18 WARN Selenium [DEPRECATION] [:browser_options] :options as a parameter for driver initialization is deprecated. Use :capabilities with an Array of value capabilities/options if necessary instead.
        ユーザーの新規登録が失敗する

Finished in 3.96 seconds (files took 1.8 seconds to load)
1 example, 0 failures

他にも書き方があるので抑えておきましょう。

focus 'ユーザーの新規作成が失敗する' do
  # テストは省略
end

fit 'ユーザーの新規作成が失敗する', focus: true do
  # テストは省略
end

fit 'ユーザーの新規作成が失敗する' , :focus do
  # テストは省略
end

コメント