Help us understand the problem. What is going on with this article?

Rspecの便利なオプション

rspecを動かす際には様々なオプションを付けて動かすことができます。例えば、モデルのspecだけ動かしたい場合は、rspec spec/models/などとすればmodelsの配下にある_spec.rbのテストが走ります。

オプションを参照したい場合は、

rspec --help

で参照できます。

この記事では、便利だと感じたRSpecを動かすためのオプションをピックアップして書き連ねて行こうと思います。

この記事を書こうと思った理由

最近、この本を読んで非常にまとまっていて読みやすいなと思いました。しかし、この本はまだ翻訳がなくて、認知度もあまりないのかと思いました。

なので、この本に載っていることを少しでも紹介して、本の紹介とともに、自分に対しての備忘録としてもいいんじゃないかと思い、書こうと思いました。
Effective Testing with RSpec 3
rspec3.jpg

フィルタリングオプション

フィルタリングオプションは特定のテストだけ動かすようにするオプションを指します。

テストは基本的に必要なものだけ実行することになるかと思います。例えば、実装中のコントローラーのスペックだけ動かしたいなど。

そんな時に便利なオプションを紹介します。

特定のスペックだけ実行

rspec spec/path

spec/pathで指定したパスの*_spec.rbファイルが実行されます。
userモデルのspecだけ動かしたい場合は

rspec spec/models/user_spec.rb

失敗するスペックだけ実行

rspec --only-failures

このオプションを実行するには事前に

spec/spec_helper.rb
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の名前の一部'

これが便利なのは、名前の一部だけで良いと言うところです。
例えば

spec/models/user_spec.rb
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を書いていて楽しさを感じるようになりました。
テストもやはり綺麗にかけたらうれしいですね。

洋書なので、もちろん全て英語ですが、それほど難しい英語でもないので、是非この機会に読んでみてはいかがでしょうか。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした