2015年11月29日日曜日

rails4 modelのvalidate:maximumをrspecでテストする

  • 公開日: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処理は、テストコードを書く必要があるかどうかは微妙だと個人的には思っています。

とはいえ、書いておいても損はないと思うので、プロジェクトの締め切りに応じて書く、書かないをコントロールするとよいのではないでしょうか。

以上です。

Rails4の開発にオススメの本


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...