心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

Everyday Rails3章 バリデーションをテストする

   


さっき、Aaronを削除したらテスト失敗することを確認しましたが、名前入力無しの場合の項目がありました。

# 名がなければ無効であること
it “is invalid without a firstname” do
expect(Contact.new(firstname: nil)).to have(1).errors_on(:firstname)
end

Contact.newでfirstnameの入力がない場合はfirstnameにエラーが1個でる

みたいな意味でしょうか。

“is invalid without a firstname”は緑になりました。

to have を否定形にするときは
to_not have

になるそうです。to_not haveでは赤になりました。

同じように、
# 姓がなければ無効であること
it “is invalid without a lastname” do
expect(Contact.new(lastname: nil)).to have(1).errors_on(:lastname)
end
“is invalid without a lastname” は緑になりました。

# 重複したメールアドレスなら無効であること
って最初は書いてありましたが書き変わっています。

# メールアドレスが重複する場合は無効である
it “is invalid with a duplicate email address” do
Contact.create(
firstname: ‘Joe’, lastname: ‘Tester’,
email: ‘tester@example.com’)
contact = Contact.new(
firstname: ‘Jane’, lastname: ‘Tester’,
email: ‘tester@example.com’)
expect(contact).to have(1).errors_on(:email)
end

createで新しいデータを作った後、newで同じメールアドレスを指定してテスト。
テストは緑になりました。

と書きながら、コードはサンプルコードそのままなので、モデルのコードを見る事にします。

class Contact < ActiveRecord::Base
  has_many :phones
  accepts_nested_attributes_for :phones

  validates :firstname, presence: true
  validates :lastname, presence: true
  validates :email, presence: true, uniqueness: true

  def name
    [firstname, lastname].join(' ')
  end

  def self.by_letter(letter)
    where("lastname LIKE ?", "#{letter}%").order(:lastname)
  end
end

まだRuby脳になっていないのか、テスト(というか仕様)書きながら複雑な判定ロジック考えていましたが、
そっか
vailidationは一言で済むんですね。RubyじゃなくてRailsの機能か。すごいな。

 - テクニカル

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
destory

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

no image
RailsTutorial4.0を高速で復習する。6.5章。

演習1問目。 リスト6.20の、メールアドレスを小文字に変換するコードに対するテ …

no image
formatはどこから取ってくる?

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

もうあかん!Mac OSXのスクロールを逆にする

OSXのいつのバージョンからだっけ? スクロールの向きが突如逆になったんですよね …

no image
RailsTutorial4.0を高速で復習する。9.1.2章。

9.1.2編集の失敗、です。 テストを書きます リスト9.9 ユーザーupdat …

no image
RailsTutorial4.0を高速で復習する。8.2.5章。

8.2.5ユーザー登録と同時にサインインする、です。 ユーザーが登録を行った後、 …

初めてのRuby8章 8.2変数と定数

8.2 変数と定数 8.2.1 インスタンス変数 @で始まるのがインスタンス変数 …

twitterと連携した写真のライブラリー

iPhoneを使うようになってから気軽に写真撮影し、そのままtwitter投稿す …

no image
RailsTutorial4.0を高速で復習する。6.3章。

6.3セキュアなパスワードを追加する、です。 パスワードはセキュアであるべきと思 …

no image
浅田真央ちゃんは今シーズンが最後!テレビチューナーにHDつけて録画する!

テレビ見なくなってはや10年以上。ただし、 *真央ちゃんを除く*です。 土曜日に …