2014-11-21 64 views
0

我按照RailsCasts插曲從頭開始做認證:http://railscasts.com/episodes/250-authentication-from-scratch-revised的Rails 3.2的集成測試登錄系統

現在我想用做集成測試內置的測試框架。

在我的數據庫中,我使用了email和password_digest等字段,因爲我使用的是has_secure_password。在我的夾具用戶我有

account_administrator: 
    email: [email protected] 
    password_digest: password 
    first_name: Bob 
    last_name: Jones 
    is_team_member: true 
    is_direct_manager: false 
    is_senior_leadership: false 
    is_reviewer: false 
    is_account_administrator: true 

在我的集成測試我有

require 'test_helper' 

class UserFlowsTest < ActionDispatch::IntegrationTest 
    fixtures :users 

    def login(user) 
    open_session do |s| 
     u = users(user) 
     s.https! 
     s.post "/sessions", email: u.email, password: "password" 
     assert_redirected_to root_url 
    end 
    end 



    test "logging in" do 
    login(:account_administrator) 
    end 

end 

我遇到的問題是,「註冊」試驗失敗,此錯誤:

1) Error: 
test_logging_in(UserFlowsTest): 
BCrypt::Errors::InvalidHash: invalid hash 

我認爲這是因爲我在我的夾具中提供的「散列」不是真正的password_digest - 它只是字符串「password」。我怎樣才能解決這個問題,使我的測試工作?

回答

0

使用password ='password'在數據庫,應用UI或rails控制檯(User.create(...))中手動創建用戶。然後使用rails控制檯找到password_digest(User.first.password_digest) - 然後將該password_digest粘貼到fixture的password_digest字段中,它應該可以工作。

+0

這是一個安全問題,將電子郵件,密碼和密碼一起清除乾淨嗎?特別是如果它致力於公共代碼庫? – user1002119 2014-11-21 05:00:42