Yanonoblog!

こつこつと

RSpec実行時の挙動

はじめに

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.rbRailsアプリケーションで使用され、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などのテストフックがこの段階で実行されます。

テストの実行

読み込まれたテストファイルの中から、コマンドラインで指定されたもの(もしくはすべて)が実行されます。

テストはdescribecontextブロックでグループ化され、itブロック内で実際の検証が行われます。

フックの後処理

afterなどのフックが実行されます。

結果の出力

設定されたフォーマッタを使用してテスト結果が出力されます。デフォルトでは、ドット(成功)、F(失敗)、アスタリスク(保留)などの文字がコンソールに表示されます。

終了コードの返却

全てのテストが成功すると、RSpecは終了コード0を返します。1つでも失敗があれば、非ゼロの終了コードが返されます。

このプロセスにより、RSpecはプロジェクトに対して一連のテストを実行し、その結果を詳細に報告します。

おしまい

コメント

本記事の内容は以上になります!


プログラミングスクールのご紹介 (卒業生より)

お世話になったプログラミングスクールであるRUNTEQです♪

https://runteq.jp/r/ohtFwbjW

こちらのリンクを経由すると1万円引きになります。

RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。

もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。

https://twitter.com/outputky