Model Specは何をテストするのか。
主にビジネスロジック等を記載したモデルクラス内のメソッドの動作を検証します。
Model Specを利用するための準備
モデルのテストを作成するための下記コマンドを実行しましょう。
1 |
rails g rspec:model モデル名 |
Dockerを使用している場合は下記のようなコマンドになるでしょう。
1 |
docker-compose exec Railsのコンテナ名 bundle exec rails g rspec:model モデル名 |
「spec/models/モデル名_spec.rb」というファイルが生成されるのでこれがModel Specのテストを記述するためのファイルになります。
基本的な書き方
1 2 3 4 5 6 7 8 9 10 11 |
RSpec.describe User, type: :model do describe 'テストの対象を記載、「#メソッド名」とすることが多い(例:#age)' do context 'テストの条件を記載(例:3年後の生年月日の場合)' do let(:user) { User.new(birthday: Time.zone.now + 3.years) } it 'メソッドの結果がどうであれば正しいか記載する(例:年齢が3歳であること)' do expect(user.age).to eq 3 end end end end |
バリデーションのテスト
1 2 3 4 5 6 |
let(:user) { User.new(name: nil) } it '名前が空欄になっている場合のバリデーションテスト' do user.valid? expect(user.errors[:name]).to include("can't be blank") end |
valid?メソッドでモデルの有効性を検証できます。
アソシエーションのテスト
1 2 3 4 5 |
context 'customerモデルとの関係' do it 'UserとCustomerモデルがN:1となっている' do expect(Customer.reflect_on_association(:user).macro).to eq :belongs_to end end |
まとめ
他にもクラスメソッドのテストなどを始め様々なテストがありキリがないと思いますのでまずは優先度が高いケースから記述するなど工夫しましょう。
この記事へのコメントはありません。