Railsを使っていてRSpecでststem specとrequest specのテストだけ実行したい時とかに--pattern
関連オプションを利用すると便利だったので使い方をメモ📝
RSpecの--pattern
の使い方
公式Doc
Help
$ bundle exec rspec -h # ... -P, --pattern PATTERN Load files matching pattern (default: "spec/**/*_spec.rb"). --exclude-pattern PATTERN Load files except those matching pattern. Opposite effect of --pattern. # ...
基本的には上記の公式ドキュメント・helpの通りです。例えばRailsにおいてmodelのテストだけ実行したい場合は以下のようにします。
$ bundle exec rspec --pattern "spec/models/**/*_spec.rb"
ただこれだと単純にbundle exec rspec spec/models
とするのと大して変わらないのですが、
例えばE2E関連のテスト(sysytem spec, feature spec)を実行したいといったときに、以下のようにスッキリ書けるので便利です。
$ bundle exec rspec --pattern "spec/{system,features}/**/*_spec.rb"
--exclude-pattern
を使って特定のパターンを除外する
--exclude-pattern
を使うと--pattern
とは逆にマッチしないものを対象をすることが出来ます。
例えば実行時間がかかるのでE2Eテストの実行は除外して全体のテストを流したいといった場合には以下のようにすると実現できます。
$ bundle exec rspec --exclude-pattern "spec/{system,features}/**/*_spec.rb"
また--exclude-pattern
は--pattern
と併用できるので、以下のようにE2Eテストから内部利用の画面のテストを外したりといったこともできます。
$ bundle exec rspec --pattern "spec/{system,features}/**/*_spec.rb" --exclude-pattern "spec/**/{admin,private}/**/*_spec.rb"
おわりに
RSpecのオブション、調べてみると結構便利なものがありますね!