はじめに
Railsの自動テストを学ぶにあたって、RSpecでの実装方法を勉強したので書き残していく。
Ruby:3.2.1
Rails:7.1.2
RSpec のセットアップ
gemの追加。rspec-rails
をGemfileに追加する。
group :development, :test do
gem 'rspec-rails'
end
テスト用のデータベースを設計。今回はSQLiteを採用。
test:
<<: *default
database: db/test.sqlite3
RSpecの基本的な設ファイルの追加。
$ rails generate rspec:install
テストの作成
モデル/ビュー/コントローラーでそれぞれテストを作成していく。
RSpecの基本的な書き方は以下。
RSpec.describe User, type: :mode do
it "is valid with a name" do
user = User.new(
name: "test01")
expect(user).to be_valid
end
end
RSpec.describe User, type: :mode
の部分は、Userモデルをテストしますよというようなニュアンス。
it "is valid with a name"
の部分はexampleというもので、テストの内容を記載する。
今回だと、Userに対してnameのバリデーションがあるかを確認する。
実際のテストはexampleをネストさせて、その中に記載する。
expect(user).to be_valid
の部分がテストの実処理で、expect
に渡したオブジェクトを検証してto be_valid
ではバリデーションが有効かどうかを確認している。
マッチャーの種類については公式リポジトリを参照。
exampleには見出しを担うdescribe
や条件分岐のcontext
や事前処理のbefore
などがある。
モデルスペックの作成
以下コマンドで対象のモデルのSpeファイルが作成される。
$ rails g rspec:model モデル名
コントローラスペックの作成
以下コマンドで対象のコントローラのSpeファイルが作成される。
$ rails g rspec:controller コントローラ名 --controller-specs --no-request-specs