- 公開日:2015年11月29日
記事概要
rails4でmodelのvalidateをrspecで記述する方法の説明記事です。
すぐ忘れてしまうので、まとめました。参考にする際は、rspecのバージョンに注意してください。この記事では3.X系を利用しています。
環境
- ruby2.2.3
- ruby4.2.4
- rspec-rails 3.0.2
モデルの作成
ここではサンプルとしてNoteというモデルを作成します。
このモデルにvalidateを記載します。
models/note.rb
# encoding: utf-8 class Note < ActiveRecord::Base validates :title, length: { maximum: 64 } end
上記のモデルでは、titleという属性をもっています。validateとして、
- 最大文字数は64文字
を設定しています。
このvalidateをテストするrspecを実装します。
rspecモデルの作成
spec/models/note_spec.rbにテストコードを実装します。
境界値のエラー文字数65字の文字列を設定します。
spec/models/note_spec.rb
it "fails validation with 65 word number of title" do note = Note.new ## 65文字を設定 note.title = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' expect(note).not_to be_valid end
失敗を期待するので、not_to be_validを指定しています。上記のrspecを実行します。
terminal
benv exec bundle exec rspec spec/models/note_spec.rb 1 example, 0 failures
うまくいきました。次は境界値の正常文字数64字の文字列を設定します。
spec/models/note_spec.rb
it "successes validation with 64 word number of title." do note = Note.new ## 64文字を設定 note.title = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' expect(note).to be_valid end
失敗を期待するので、be_validを指定しています。実行します。
terminal
benv exec bundle exec rspec spec/models/note_spec.rb 2 example, 0 failures
うまくいきました。最後に値がnilの場合を設定します。
spec/models/note_spec.rb
it "successes validation with nil of title" do note = Note.new expect(note).to be_valid end
実行します。
terminal
benv exec bundle exec rspec spec/models/note_spec.rb 3 example, 0 failures
うまくいきました。
まとめ
modelのvalidate処理は、テストコードを書く必要があるかどうかは微妙だと個人的には思っています。
とはいえ、書いておいても損はないと思うので、プロジェクトの締め切りに応じて書く、書かないをコントロールするとよいのではないでしょうか。
以上です。
0 件のコメント:
コメントを投稿