心はいつも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
ToDoの管理方法

東大生はノートがきれいだとか、、 きれいに書いている暇があったら、頭に書いて覚え …

no image
Macでアプリを強制終了

Macでアプリを強制終了したことは今までなかったのですが、どうにもftpソフトの …

no image
Google Appsで問い合わせフォームを作りました

とっても簡単でした。Google Appsでこのブログに問い合わせフォームを設置 …

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

11.2.4[フォローする] ボタン (標準的な方法)、です。 仕様 それぞれの …

パーフェクトRuby 2章Rubyの基礎 2-1 Hello,Ruby

12章から5章まではPart2 Ruby言語仕様 です。 2章 Rubyの基礎 …

Eclipse CDTインストールでCould not find

さいたまスーパーアリーナで全スサノオ使い果たし力尽きてはや1ヶ月と1週間。世の中 …

GitにRailsプロジェクトをpushする

HomebrewerでGitをインストールし、Rails 3.2やRails4. …

herokuのWe’re sorry, but something went wrong.に苦しんだ

Rails3.2環境に戻してアプリを作ろうとしています。 herokuにpush …

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

6.3.3ユーザー認証、です。 新規ユーザー登録のときは入力で、:passwor …

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

5.2SassとAsset Pipeline、です。 ここは読み物系です。読んで …