2013-10-15 30 views
0

Michael Hartl在Ruby on Rails教程的chapter 6.x教程中,我無法讓Rspec通過email is not present檢查。Michael Hartl第6章RailsTutorial.org Rspec空白電子郵件檢查

從我有限的知識:

  • 的User_spec創建使用的代碼之後才做測試用戶。
  • 然後根據user.rb中的屬性對該用戶進行檢查,以確定 確定:presence有效。
  • 如果檢查有效,則檢查返回true或false。
  • 在接下來的代碼中,之前{@ user.email = 「」}設置電子郵件 空
  • 然後說:it { should_not be_valid }

然而,它失敗User when email is not present錯誤。

/spec/models/User_spec.rb

require 'spec_helper' 

describe User do 

    before do 
    @user = User.new(name: "Example User", email: "[email protected]") 
    end 

    subject { @user } 

    it { should respond_to(:name) } 
    it { should respond_to(:email) } 

    it { should be_valid } 

    describe "when email is not present" do 
    before { @user.email = " " } 
    it { should_not be_valid } 
    end 
end 

spec/models/user.rb

class User < ActiveRecord::Base 
    validates :name, presence: true 
    validates :email, presence: true 
end 

失敗:

1) User when email is not present Failure/Error: it { should_not be_valid } expected # not to be valid # ./spec/models/user_spec.rb:18:in `block (3 levels) in '

Finished in 0.03278 seconds 
4 examples, 1 failure 

Failed examples: 

rspec ./spec/models/user_spec.rb:18 # User when email is not present 

回答

2

你驗證電子郵件作爲存在,這意味着,如果該值是零,它會失敗或者一個空字符串。

在描述電子郵件不應出現的情況下,您將rspec塊定義爲由單個空格組成的字符串。你真正想要做的是一個空字符串,通過刪除空間:

before { @user.email = "" } 

那現在的驗證就會失敗。

+0

空白字符串與空字符串不同,我正確嗎?那麼電子郵件=「」}只是檢查一個空白的框,而不是如果電子郵件是空的?我有什麼意義嗎?哈哈 – TheBetterJORT

+0

嗯,我會用空白和空來表示同樣的事情,因爲空間仍然是一個角色。你的例子中的字符串是''「' - 注意空間。根據rails,這是一個非空字符串,它也不是空白。 –

+0

澄清:在rails中,'「」.blank? ==「」.empty? == true',但是'「」.blank? == true; 「」.empty? ==假'!換句話說,包含空格**的字符串是空白**,但是**不是空**。 –

相關問題