RSpec を試しに動かしてみよう
学習の目標
本章では、以下の内容を学習します。
- RSpecが正しく動作しているかの確認方法を習得する
- 簡単なテストファイルの作成と配置方法を理解する
- 基本的なテストコードの構造と記述方法を学ぶ
- テスト実行結果の読み方と解釈を理解する
はじめに
前回までにRSpecのインストールと初期設定が完了しましたので、今回は実際にRSpecが正しく動作するかを確認していきます。
テストフレームワークを導入した後は、実際のテストを記述する前に、環境が正しく構築できているかを確認することが重要です。今回は、簡単なテストコードを通じて、その確認方法を学習します。
テストコードを書くのが初めての方も安心してください。まずは動作確認のための最もシンプルなテストから始めて、RSpecの基本的な使い方に慣れていきましょう。
基本的な動作確認
まずは、RSpecが正しく実行できるか確認します。ターミナルで以下のコマンドを実行します。
bundle exec rspec
正常に動作していれば、次のようなメッセージが表示されます。
No examples found.
Finished in 0.00001 seconds (files took 0.131 seconds to load)
0 examples, 0 failures
「No examples found(テストが見つかりません)」というメッセージが表示されましたが、これは正常な状態です。まだテストコードを作成していないため、実行するテストが存在しない状態を示しています。
RSpecの仕組みとしては、spec
ディレクトリ内にある_spec.rb
で終わるファイルを自動的に検索し、その中にあるテストを実行します。現時点ではそのようなファイルがないため、「テストが見つかりません」というメッセージが表示されているわけです。
動作確認用のテストの作成
RSpecが実際にテストを実行できることを確認するため、簡単なテストコードを記述していきます。まずはテストファイルを作成し、その中に基本的なテストを書いてみましょう。
テストファイルの作成
まず、テストコードを保存するファイルを作成します。
spec/
ディレクトリを開く- 右クリックして
New File
を選択 - ファイル名を
sample_spec.rb
として作成
作成後のディレクトリ構造は以下のようになります。
.
├── .rspec
├── Gemfile
├── Gemfile.lock
└── spec/
├── spec_helper.rb
└── sample_spec.rb
ファイル名が_spec.rb
で終わっていることに注目してください。これはRSpecの命名規則で、このパターンのファイルがテストファイルとして認識されます。
テストコードの記述
作成したsample_spec.rb
に、以下の簡単なテストコードを記述します。
RSpec.describe '動作確認テスト' do
it '足し算の結果が正しいこと' do
expect(1 + 1).to eq(2)
end
end
このコードの構造について説明します。
まずdescribe
ブロックは、テストのグループを作成します。これは関連するテストケースをまとめる役割を持ちます。ここでは「動作確認テスト」という名前を設定しています。実際のプロジェクトでは、テスト対象のクラス名やメソッド名を指定することが多いです。
そしてit
ブロックは、個別のテストケースを定義します。「足し算の結果が正しいこと」という説明的な名前を付けています。この部分には、テストが何を検証しているのかを明確に記述することがベストプラクティスです。
最後にexpect(1 + 1).to eq(2)
という部分で、1 + 1が2に等しいことを検証しています。基本的な計算をテストしていますが、これはRSpecの動作確認が目的です。この構文は「1 + 1の結果が2と等しいことを期待する」と読むことができます。
この3つの要素(describe、it、expect)がRSpecの基本的な構造を形成しています。実際のプロジェクトでは、より複雑なテストを書くことになりますが、基本的な構造は同じです。
テストの実行
テストコードを保存したら、再度コマンドを実行します。
bundle exec rspec
正常に実行されると、以下のような結果が表示されます。
動作確認テスト
足し算の結果が正しいこと
Finished in 0.0023 seconds (files took 0.1345 seconds to load)
1 example, 0 failures
この出力結果から読み取れる重要な情報は以下の通りです。
まず「動作確認テスト」というテストグループと「足し算の結果が正しいこと」というテストケースが実行されたことがわかります。これは先ほど記述したdescribe
とit
の内容です。
次に「1 example, 0 failures」という行は、1つのテストケースが実行され、すべてのテストが成功したことを示しています。もしテストが失敗した場合は、どのテストが失敗したのか、期待値と実際の値は何だったのかなどの詳細情報が表示されます。
最後に「Finished in 0.0023 seconds」という部分は、テストの実行にかかった時間を示しています。単純なテストなので短時間で終わりましたが、テストが多くなると実行時間も増えていきます。
この結果から、RSpecが正しく動作していることが確認できました。おめでとうございます!最初のRSpecテストの実行に成功しました。
トラブルシューティング
期待した結果が得られない場合は、以下の点を順番に確認します。
ディレクトリ構造の確認
spec/
ディレクトリが存在するかsample_spec.rb
が正しい場所にあるか
ファイルの配置場所は非常に重要です。RSpecは規約に従ったディレクトリ構造を前提としているため、テストファイルは必ずspec
ディレクトリ内に配置する必要があります。
ファイルの内容確認
- テストコードに文法の誤りがないか
- ファイルが正しく保存されているか
タイプミスや構文エラーがあると、テストが正しく実行されません。特に初めてのRubyプログラミングの方は、括弧やブロックの終わりのend
が正しく対応しているか確認してください。
環境の確認
rspec --init
が実行済みか.rspec
ファイルが存在するか
初期設定が正しく行われていないと、テストの実行環境が適切に構築されていない可能性があります。前章の手順に戻って、初期化が正しく行われているか確認しましょう。
まとめ
今回は、RSpecの動作確認について学習しました。具体的には以下のことを行いました。
空の状態でRSpecを実行し、正しくセットアップされていることを確認しました。次に、簡単なテストファイルを作成し、基本的なテストコードを記述しました。そして、テストを実行して結果を確認することで、RSpecが正しく機能していることを検証しました。
これらの手順を通じて、RSpecの基本的な使い方を体験することができました。実際のテストコードはとてもシンプルなものでしたが、この基本的な構造を理解することで、より複雑なテストも書けるようになります。
次回は、実践的なテストの書き方について詳しく学習します。テストの基本的な構造や、よく使用するマッチャーなど、実践的な内容を取り扱います。RSpecの力を活用して、より堅牢なコードを書けるようになることを目指しましょう。