2014-02-23 14 views
2

我正在爲用戶登錄編寫黃瓜測試。設計:如何從分區獲取用戶密碼

我有這樣的場景背景,,增加了用戶數據庫

User.create!(

    :email => email, 

    :password => password, 

    :password_confirmation => password 

    ) 

那麼,爲什麼在我的順序一步,我得到@ user.password的零?

@user = User.find_by :email => "[email protected]" 

    ... 

    fill_in('Email', :with => @user.email) 

    fill_in('Password', :with => @user.password) 
    ... 

回答

5

設計最初通過加密存儲原始密碼。 encrypted_password(模型中的字段名稱)存儲在數據庫中。

現在,當您撥打User.find_by :email => "[email protected]"時,password字段不存在。 password不是模型用戶中的字段。它是模型中存在的實例變量,僅在您提交login/sign up表單時纔會設置。在你的情況下,你試圖在log in之前訪問密碼字段,因此,實例變量沒有設置,你得到password爲零。

如果您想了解更多詳情,您可以查看更多信息實際執行Devise password

1

退房的devise cucumber test維基頁面。

正如Kirti指出的,您無權將密碼作爲用戶模型中的屬性訪問,尤其是不能以純文本形式訪問。

如果您正在測試登錄,請將密碼字段保存爲變量或在該測試中創建用戶。

Given /^I am a new, authenticated user$/ do 
    email = '[email protected]' 
    password = 'secretpass' 
    User.create!(
    :email => email, 
    :password => password, 
    :password_confirmation => password 
) 

    visit '/users/sign_in' 
    fill_in "user_email", :with => email 
    fill_in "user_password", :with => password 
    click_button "Sign in" 

end 

如果你真的需要更高版本(@user = User.find_by)來查找你的用戶,並填寫密碼,那麼你就需要保持你的密碼作爲測試的範圍以外的變量。

相關問題