rspecを動かす際には様々なオプションを付けて動かすことができます。例えば、モデルのspecだけ動かしたい場合は、rspec spec/models/などとすればmodelsの配下にある_spec.rbのテストが走ります。
オプションを参照したい場合は、
rspec --help
で参照できます。
この記事では、便利だと感じたRSpecを動かすためのオプションをピックアップして書き連ねて行こうと思います。
この記事を書こうと思った理由
最近、この本を読んで非常にまとまっていて読みやすいなと思いました。しかし、この本はまだ翻訳がなくて、認知度もあまりないのかと思いました。
なので、この本に載っていることを少しでも紹介して、本の紹介とともに、自分に対しての備忘録としてもいいんじゃないかと思い、書こうと思いました。
Effective Testing with RSpec 3
フィルタリングオプション
フィルタリングオプションは特定のテストだけ動かすようにするオプションを指します。
テストは基本的に必要なものだけ実行することになるかと思います。例えば、実装中のコントローラーのスペックだけ動かしたいなど。
そんな時に便利なオプションを紹介します。
特定のスペックだけ実行
rspec spec/path
spec/pathで指定したパスの*_spec.rbファイルが実行されます。
userモデルのspecだけ動かしたい場合は
rspec spec/models/user_spec.rb
特定の行のみ実行
特定のスペックの15行目のテストのみ実行したい場合。
15行目がcontextやdescribeの場合、そのcontext、describe内の全てのテストが実行されます。
rspec spec/path:15
失敗するスペックだけ実行
rspec --only-failures
このオプションを実行するには事前に
RSpec.configure do |config|
config.example_status_persistence_file_path = 'spec/examples.txt'
を設定する必要があります。
これはrspecを一度実行して、このfile_pathで指定したファイルにテスト結果を一時的に保管します。そして、保管した結果から失敗したものだけをピックアップするわけですね。なので、その保管するファイルを指定してやらないといけません。
適宜、指定するパスは変えてください。
パスを指定し、rspec --only-failuresを動かすと自動的にファイルができます。
次に失敗するスペックのみ実行
rspec --next-failure
こちらもonly-failuresと同様に config.example_status_persistence_file_path = 'spec/examples.txt'を指定する必要があります。
特定のexampleやdescribeのみ実行
rspec --example '実行したいexampleやdescribeの名前の一部'
これが便利なのは、名前の一部だけで良いと言うところです。
例えば
require 'rails_helper'
RSpec.describe User, type: :model do
describe 'test' do
it 'outputs "test"' do
p 'This is test example'
end
end
example 'test2' do
p 'This is test example2'
end
end
このようなスペックがあったとするとして、以下を実行すると
rspec --example 'st'
結果は以下のようになります。
Run options: include {:full_description=>/st/}
"This is test example"
."This is test example2"
.
Finished in 0.011 seconds (files took 40.22 seconds to load)
2 examples, 0 failures
SQLでのLIKE '%st%'みたいなものですね。
'st'が入ったスペックを実行してくれます。
アウトプットオプション
rspecの結果の出力を変えるようなオプションです。
スタックトレースまで表示
rspec --backtrace
--backtraceを指定すると失敗したスペックのスタックトレースも表示してくれます。
--backtraceは-bに省略もできます。
情報量が多いので、rspec --next-failure -bなどと実行するのが良いかもしれません。
テストの一覧を出力
rspec --dry-run
このコマンドはテストの一覧をテストを実行することなく、出力してくれます。
名前を確認する時などに良いかもしれませんね。
テストの警告を出力
rspec --warnings
このコマンドはspecファイル中の警告を表示してくれます。
スペルミスなどがあればそれも警告の内に入れ、出力してくれます。
テストを書き終えた後や、デプロイする段階などで確認するのが良いかもしれません。
時間のかかるテストを表示
rspec --profile
—-profileは-pと省略することもできます。
これを実行すると、テストを全部実行した後、実行に最も時間がかかったものを数個、ランキングで出力してくれます。
rspecの実行に時間がかかる場合などに、どこがボトルネックになっているのかすぐに分かります。便利で結構よく使ってます。
フォーマット
rspec --format documentation
テスト内容を詳しく表示してくれます。デフォルトは. F *などが表示されます。
デフォルトは以下の通り。
rspec --format progress
まとめ
Effective testing with rspecを読んで、rspecは非常に奥深いものと感じましたしrspecを書いていて楽しさを感じるようになりました。
テストもやはり綺麗にかけたらうれしいですね。
洋書なので、もちろん全て英語ですが、それほど難しい英語でもないので、是非この機会に読んでみてはいかがでしょうか。