2013-02-12 62 views
1

我是Rails的新手,所以請在這裏與我聯繫。我一直在瀏覽Rails教程,將用戶帳戶和正在運行的測試放在我正在進行的項目上。RSPEC電子郵件格式失敗

Failures: 

    1) when email format is invalid should be invalid 
    Failure/Error: @user.email = invalid_address 
    NoMethodError: 
     undefined method `email=' for nil:NilClass 
    # ./spec/models/user_spec.rb:71:in `block (3 levels) in <top (required)>' 
    # ./spec/models/user_spec.rb:70:in `each' 
    # ./spec/models/user_spec.rb:70:in `block (2 levels) in <top (required)>' 

    2) when email format is valid should be valid 
    Failure/Error: @user.email = valid_address 
    NoMethodError: 
     undefined method `email=' for nil:NilClass 
    # ./spec/models/user_spec.rb:81:in `block (3 levels) in <top (required)>' 
    # ./spec/models/user_spec.rb:80:in `each' 
    # ./spec/models/user_spec.rb:80:in `block (2 levels) in <top (required)>' 

Finished in 0.527 seconds 
9 examples, 2 failures 

Failed examples: 

rspec ./spec/models/user_spec.rb:67 # when email format is invalid should be invalid 
rspec ./spec/models/user_spec.rb:78 # when email format is valid should be valid 

我不知道問題是什麼。我看到它說了什麼,但我甚至從教程的代碼中仔細檢查我做了什麼來確保一切都正確輸入。

這裏是user_spec文件。

https://gist.github.com/pwz2k/4770845

這裏的user.rb文件。

https://gist.github.com/pwz2k/4770854

的失敗並沒有出現,直到我說的電子郵件驗證。

+0

nil:NilClass錯誤告訴你@user不存在/未設置爲任何值。你正在使用哪個教程? – 2013-02-12 17:10:09

+0

部分遵循邁克爾哈特爾教程http://ruby.railstutorial.org/book/ruby-on-rails-tutorial。我必須遵循它來爲我的網站創建用戶註冊/個人資料部分。 – 2013-02-12 17:15:52

回答

0

請確保您在開始測試之前創建@user ..您的用戶測試中是否包含這些行? (rails tutorial listing 6.16

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

是的。 (名稱:「示例用戶」,電子郵件地址:「[email protected]」, 密碼:「foobar」,password_confirmation:「foobar」)#: 'before @user = User.new – 2013-02-12 17:31:50

0

錯誤非常明顯!您將電子郵件設置爲無類。這意味着你應該到電子郵件設置,這是我們說

@user.email = "something" 

錯誤是抱怨沒有用戶,而且不會有任何的電子郵件用戶的用戶。

爲了使這裏的工作是一個示例代碼,它將幫助你解決這個問題。

describe "validations" do 
    before(:each) do 
    @user = User.new(name: "gates", email: "[email protected]") 
    end 
    it "should be invalid" do 
    invalid_emails = %w{[email protected] p.com name.gmail.com foo.ymail} 
    invalid_emails.each do |invalid_email| 
     @user.email = invalid_email 
     expect(@user.email).to_not be_valid 
    end 
    end 

    it "should be valid" do 
    @user.name = "somename" 
    valid_emails = %w{[email protected] [email protected] [email protected] 
    [email protected]} 
    valid_emails.each do |valid_email| 
    @user.email = valid_email 
    expect(@user.email).to be_valid 
    end 
    end 
end 

請確保您已在fixures文件夾中爲用戶創建了一個修補程序。

希望這會有所幫助!