RSpec実行時の挙動
- はじめに
- spec_helper.rb と rails_helper.rb の読み込み
- テストファイルの探索と読み込み
- フックの実行
- テストの実行
- フックの後処理
- 結果の出力
- 終了コードの返却
- おしまい
はじめに
RSpecのコマンドが実行された後の挙動について調べました。
RSpecのコマンドが実行されると、一連の手順が実行されます。
コマンドライン引数の解析
RSpecのコマンドラインオプションが解析され、テストの実行方法や出力フォーマットなどの設定が行われます。
設定ファイルの読み込み
~/.rspec
、プロジェクトのルートディレクトリ内の.rspec
、またはカスタム設定ファイルがあれば読み込まれます。ここで、RSpecの全体的な設定が行われます。
オプションの例
オプションは多岐にわたります。
# デフォルト (specディレクトリ内にある全ての*_spec.rbファイルを探し、それらのテストをロードし実行する) rspec # 実行するテストファイルのパスを指定 rspec spec/models/user_spec.rb # ファイル内の特定のテストラインを実行 rspec spec/models/user_spec.rb:27 # タグによるテストのフィルタリング rspec --tag focus # 'focus: true'が指定されたexampleを実行 rspec --tag ~focus # 'focus: true'が指定されていないexampleを実行 # 出力フォーマットの指定 rspec --format documentation # 詳細なドキュメント形式で出力 rspec --format progress # プログレスバー形式で出力 (デフォルト) # プロファイル情報の表示 (実行に最も時間がかかったテストの表示) rspec --profile # カラー付きで結果を出力 rspec --color
spec_helper.rb と rails_helper.rb の読み込み
これらのファイルはテストスイート全体で共通の設定やヘルパーメソッドを定義するために使用されます。
rails_helper.rb はRailsアプリケーションで使用され、Rails固有の設定を含みます。
rails_helper.rbで一般的に使われる設定例
# spec_helperをロードします require 'spec_helper' # Railsのテストヘルパーをロードします require 'rails_helper' # Rails固有の設定を含みます RSpec.configure do |config| # データベースをトランザクションでラップし、テスト後にロールバックします config.use_transactional_fixtures = true # ビューをテストする際に、実際のビューをレンダリングします config.render_views # FactoryBotのメソッドを直接使用できるようにします config.include FactoryBot::Syntax::Methods # Deviseのテストヘルパーを使用できるようにします (Deviseを使用している場合) config.include Devise::Test::IntegrationHelpers, type: :request # カスタムヘルパーメソッドや共通の設定などを含むファイルをロードします Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } end
テストファイルの探索と読み込み
RSpecはデフォルトでプロジェクトの spec ディレクトリ内の _spec.rb で終わるファイルをテストファイルとして認識し、これらのファイルをアルファベット順に読み込みます。
フックの実行
beforeなどのテストフックがこの段階で実行されます。
テストの実行
読み込まれたテストファイルの中から、コマンドラインで指定されたもの(もしくはすべて)が実行されます。
テストはdescribeやcontextブロックでグループ化され、itブロック内で実際の検証が行われます。
フックの後処理
afterなどのフックが実行されます。
結果の出力
設定されたフォーマッタを使用してテスト結果が出力されます。デフォルトでは、ドット(成功)、F(失敗)、アスタリスク(保留)などの文字がコンソールに表示されます。
終了コードの返却
全てのテストが成功すると、RSpecは終了コード0を返します。1つでも失敗があれば、非ゼロの終了コードが返されます。
このプロセスにより、RSpecはプロジェクトに対して一連のテストを実行し、その結果を詳細に報告します。
おしまい
コメント
本記事の内容は以上になります!
プログラミングスクールのご紹介 (卒業生より)
お世話になったプログラミングスクールであるRUNTEQです♪
こちらのリンクを経由すると1万円引きになります。
RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。
もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。