RSpecをRailsに入れたときに生成されるファイルと、それらの最初から記載されている設定について調べた
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のトレースを除外する。