心はいつも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

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

  関連記事

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

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

ブログをアプリを使ってiPhoneから更新

この前の投稿と、前の前の投稿はiphoneから行いました。ノートPCだとブログ投 …

no image
future vision 2019 vs 2010

マイクロソフトのfuture visonが話題らしい。 2019年の近未来。 情 …

ジョジョ専用kindle fire HDの電源が入らない!

電源が入らない!MacBookAirが真っ黒になりました。とか、 iPhoneの …

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

9.2認可、です。 自分以外の人が自分のProfileを変更できないようにします …

Objective-C苦節3ヶ月アプリ作れるようになった

このブログairpucci.comのメニューにアプリ開発追加しました。 昨年秋よ …

no image
RailsのRoutingいろいろ

コントローラーがAbc アクションがactrionxだとして、 http://y …

no image
Vaio Pよりも軽く感じる?MacBookAirとお出かけ

Vaoi Pを手放し、iPadも手放し、UQ Wimaxは解約し、DellのWi …

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

11.2フォローしているユーザー用のWebインターフェイス、です。 モデルができ …

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

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