2013-08-23 151 views
0

我正在開發一個Web應用程序的登錄/退出功能,我正在爲學習而構建。爲什麼upcase函數使我的rspec測試失敗?

在這一週,我是不是能夠通過以下RSpec的測試:昨天

describe "sucessfull log in" do 
    let(:user) {FactoryGirl.create(:user)} 

    before do 
     visit signin_path 
     fill_in "Email", with: user.email.upcase 
     fill_in "Password", with: user.password 
     click_button 'Sign in' 
    end 

    it {should have_title(user.name)} 
    it {should have_link('Account')} 
    it {should have_link('Profile', href: user_path(user))} 
    it {should have_link('Sign out', href: signout_path)} 
end 

然後,最終又重新編寫這些代碼,卻忘了補充一點.upcase功能。我只剩下了.upcase.email。突然,測試通過了。

好吧,我是一個新手開發者...所以什麼感覺?爲什麼upcase函數不能讓rspec成功登錄?

在此先感謝!

+0

它只是RSpec?也許測試失敗,因爲您無法使用大寫郵件登錄。 – Stefan

+0

您可以添加您的UserController和您的用戶模型,因此我們可以比較您所做的驗證以及爲什麼它會導致您的測試失敗 – jbh

+0

您的用戶模型是否也強制電子郵件在存儲記錄之前變爲空格? – 2013-08-23 12:59:53

回答

2

你爲什麼提高電子郵件?你會同樣驚訝,如果.reverse使它失敗?您正在更改電子郵件地址。嚴格來說,與[email protected]不一樣。它可能相當於您的應用程序,但您需要讓應用程序知道這一點。

你使用的是devise?如果是這樣,config/devise.rb文件將具有:

# Configure which authentication keys should be case-insensitive. 
# These keys will be downcased upon creating or modifying a user and when used 
# to authenticate or find a user. Default is :email. 
config.case_insensitive_keys = [ :email ] 

這應該讓你在做什麼工作。如果你沒有使用它,那麼你使用的任何框架都可能有類似的選擇,如果你自己做,你需要自己處理。

+0

假設電子郵件正在上傳,因爲它用於身份驗證。完全可以像你在示例中展示的那樣進行設計。雖然電子郵件地址的非域名部分可能區分大小寫,但如果將其用於用戶身份驗證,則允許使用此屬性是非常不尋常的。 – 2013-08-24 07:47:57

+0

(對不起,我不是故意低估答案 - 在那裏意外點擊,現在它鎖定在我身上,所以我不能刪除它。) – 2013-08-24 07:53:38