概要
私のmodelスペックの運用方針を掲載します。
サンプルコード内で<単語> で表記されている部分は
<>を抜き、単語 で指定されている内容に置き換えます。
model_specで何をテストするべきか?
- バリデーション
- クラスメソッド
- インスタンスメソッド
サンプルコード(テンプレート)
app/spec/models/xxxx_spec.rb
require 'rails_helper'
RSpec.describe <モデル名>, type: :model do
before do
<インスタンス変数の準備>
end
# <バリデーションのテスト>
describe "<カラムの名前が>" do
before do
<インスタンス変数の準備>
end
context "<有効な条件ならば>" do
it "<有効な状態である>" do
expect<>
end
end
context "<無効な条件ならば>" do
it "<無効な状態である>" do
expect<>
end
end
end
# <メソッドのテスト>
describe "<メソッドの機能が>" do
before do
<インスタンス変数の準備>
end
context "<条件1ならば>" do
it "<求める結果1である>" do
expect<>
end
end
context "<条件2ならば>" do
it "<求める結果2である>" do
expect<>
end
end
end
end
00_テストレシピについて
共通利用することの多いテスト内容はspec/custom_helper.rbファイルを作成し、その中でメソッド化して記述します。'rails_helper'の中でrequire しておくことで、各specファイル内で、メソッドを利用します。
01_バリデーションのテストレシピ
独自のバリデーションを設定している部分、権限周り、決済周りは、優先的にテストをかきます。
modelファイルに単純な設定をするだけで実装できるバリデーションはテスト化の優先度下げます。