1

私は Rails に次のクラスを持っており、いくつかの rspec テストを書いています (私は rspec の初心者なので、どんな批評でも大歓迎です)。

クラス User.rb

class User < ActiveRecord::Base

email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

validates :email, :presence   => true ,
                  :format     => { :with => email_regex },
                  :uniqueness => { :case_sensitive => true },
                  :on => :create
end

そして factory.rb で

FactoryGirl.define do
  factory :user do
    sequence(:name) { |n| "my-name#{n}" }
    sequence(:email) { |n| "blue#{n}@12blue.com" }
  end
end

そして私のrspec(users_spec.rb)では:

require 'spec_helper'

describe User do
  let(:user) { FactoryGirl.build(:user) }
  it { user.should be_valid }
  it { user.should be_a(User) }
  it { user.should respond_to(:email) }

  it { user.email = " " }
  it { user.should_not be_valid } # this is causing the error 
end

そして得る

1) User 
     Failure/Error: it { user.should_not be_valid }
       expected valid? to return false, got true

ただし、検証に基づいて、ユーザーは有効ではないはずです。ここで何が起こっているのですか?何が得られないのですか (そして、それが私のせいであることはわかっています)?

どうも

4

1 に答える 1

1

ユーザーの電子メール アドレスは" ".

rspec では、すべての例が独立しています。これは、前の例で行ったことはすべて忘れられることを意味します。

あなたの場合、最後から2番目の例が実行され、電子メールが である新しい有効なactiverecordユーザーが作成され、その電子メールが"blue4@12blue.com"で上書きされ、" "アサーションが行われないため渡されます。

次に、最後の例が実行され、電子メールが有効な新しい有効なactiverecordユーザーが作成"blue5@12blue.com"され、ユーザーが有効であるため失敗します。電子メールは上書きされていません。

おそらく次のようなものが必要です。

it 'should validate the email' do
  user.email = " "
  user.should_not be_valid
end
于 2012-08-25T04:29:36.383 に答える