心はいつも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
RailsTutorial4.0を高速で復習する。8.1.3章。

8.1.3サインインのフォーム、です。 ログイン画面を作る 入力フォームをfor …

no image
G+ウィジェット設置してみました

(この投稿は別ブログameblo.jp/sweetfからの転載です) G+ウィジ …

初めてのRuby2章 2.2ハッシュ

ハッシュ ハッシュとは、オブジェクトにキーを対応させたもの。 C++,Javaで …

no image
iPhoneのメーラーが真っ黒になってしまった。

iPhoneのメーラーはiPhoneにデフォルトでついているメーラーを使っていま …

WordPress親テーマversion upに伴う、子テーマのバージョンアップ作業

WordPress子テーマの作り方で書いた通り、airpucciの現在のテーマは …

RailsTutorial4.0を高速で復習する。5.1.2章。

5.1.2BootstrapとカスタムCSS、です。 今までdivについていたイ …

iPad使用前/使用後、雑感。

5/28にiPadがAppleStoreからクロネコヤマトで届けられました。 週 …

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

5.3.4RSpecを洗練させる、です。 確かに、名前付きルートに書き換えていて …

no image
Homebrewをインストールする。

MacOS 10.8.5(Mountain Lion)にRuby&Ru …

初めてのRuby8章「オブジェクトとクラス」

2章「配列とハッシュ」の次はいきなり8章「オブジェクトとクラス」に行ってしまいま …