Madogiwa Blog

主に技術系の学習メモに使っていきます。

rspecの`--pattern`オプションを使って特定のパスのテストだけ実行するMEMO📝

Railsを使っていてRSpecでststem specとrequest specのテストだけ実行したい時とかに--pattern関連オプションを利用すると便利だったので使い方をメモ📝

RSpec--patternの使い方

公式Doc

relishapp.com

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のオブション、調べてみると結構便利なものがありますね!

参考

motty72.hatenablog.com