心はいつも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
rbenvとruby-buildのインストール

諸々のものをインストールしたら、次はHomebrewを使ってrbenvとruby …

文字化けもするし、、

自作テンプレ作ったはいいですが、問題が、、。 関連しそうな記事 iTunesをM …

no image
Gitをインストールする

Rails開発がしたいのですが、今後必要になるでしょうからGitをインストールし …

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

9.3すべてのユーザーを表示する、です。 いろいろ細かい実装するまえにこれやるべ …

no image
コンビニで買った携帯充電器がUSB充電ケーブルとして使えて意外に便利だった件

ITの最大苦手項目、 充電。。。特にiPhone多様するようになって以来、ガラケ …

Mac miniの液晶モニターにDell U2713HM使っています。

次期モデルが出るかもしれないのにMac miniを買って、自分でメモリを16Gに …

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

静的ページにaboutというページを追加するのですが、rails gを先にするの …

no image
「Follow me」バッジのつけ方。

ブログの横についている「Follow me」バッジ。いろんな方がつけているのを見 …

railsでtest unitを生成させない

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

no image
もう一度、Future Vision

2019年の世界。あと7年。 登場人物に日本人がいない事にも注目してほしい。 関 …