rails generate rspec:install時に生成されるhelperの設定

RSpecRailsに入れたときに生成されるファイルと、それらの最初から記載されている設定について調べた

Rails : 5.2.1 RSpec: 3.8.0

$ bin/rails g rspec:install
Running via Spring preloader in process 19616
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

spec_helper.rb

RSpecの設定を変更する

include_chain_clauses_in_custom_matcher_descriptions

  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

カスタムマッチャのcheinで定義された箇所をdescriptionとfailure_message,つまるところの結果に出力する。RSpec4でtrueがデフォルトになるので、そうしておく。

config.shared_context_metadata_behavior

shared_contextにシンボルを渡して、contextのincludeを行う過去の仕様を再現する。RSpec4 で:apply_to_host_groups(shared_contextにシンボルが渡せなくなる)がデフォルトになるので、そうしておく。

以下は最初コメントアウトされているが、便利なのでコメントアウトを外しておくと良い。

config.filter_run_when_matching

これを設定しておくと、 it, describe , contextに対して:focus: を引数として渡したテストだけ実行してくれる機能が有効になる。:focusをつける以外にも、fit,fdescribe,fcontextってprefixをつけてもそのテストだけ実行してくれる。便利。

config.example_status_persistence_file_path

最後に実行したテストの結果の状態を記録するファイルパスを設定する。これがあると、最後に落ちたテストのみ実行する--only-failuresオプションや最初に落ちたテストまで実行する--next-failuresオプションが使えるようになって便利。

config.disable_monkey_patching!

生成されたファイルのコメントに歴史が書いてある。かつてのRSpecの記法であった"Object#should`など、既存のオブジェクトに対してメソッドを生やすのを無効にする。既存のオブジェクト汚しちゃうよね、ってお話。

config.default_formatter

  if config.files_to_run.one?
    config.default_formatter = "doc"
  end

って感じで記載されていて、単一ファイルに対してSpecを実行した際にはテスト出力が詳細になってくれる。便利。

config.profile_examples

RSpec実行後に遅かったテストを表示してくれるんだけど、その件数を設定する。デフォルトの10件でよさそう。

config.order

テストの結果はテストの実行順に依存しないようにしたい。:randomを設定しておくと、RSpecの実行順がランダムになって実行順番に依存するテストを検出できる。また、ramdom:1234とか書いておくと、乱数のシードを固定できるので、順番を再現したいときに便利。

rails_helper.rb

こっちはRails特有の設定

config.fixture_path

fixturesがあるパスを指定する。fixturesを使わなければ消して良いとコメントには書いてある。

config.use_transactional_fixtures

trueにしておくと。RSpec実行時に大きなトランザクションを作っておいて、テスト中に作ったデータをテスト終了時に全部ロールバックする。

この設定、RSpec内で完結するなら良いのだけども、別のテストドライバーを動かしたときに、別のDBコネクションが張られると、トランザクション外でDB操作が行われてうまく行かなくなったりする。そんなときはこの設定を有効にする代わりにDatabaseCleaner/database_cleaner: Strategies for cleaning databases in Ruby. Can be used to ensure a clean state for testing.等を使ってデータを消すとよい。

config.infer_spec_type_from_file_location!

specファイルのあるパスからテストのタイプ(modelsとか)を判断できるようにする。

config.filter_rails_from_backtrace!

バックトレースを表示したときにRailsのgemのトレースを除外する。