2016-04-26 135 views
0

我目前正在從作者邁克爾哈特爾遵循Ruby on Rails教程。和我被困在其中測試應該是綠色的,但目前紅章10.1.4,這是錯誤消息:10.1.4邁克爾哈特爾的鐵軌上的紅寶石教程測試紅

Started with run options --seed 48963 

FAIL["test_valid_signup_information_with_account_activation", UsersSignupTest, 1.7533403700217605] 
test_valid_signup_information_with_account_activation#UsersSignupTest (1.75s) 
     Failed assertion, no message given. 
     test/integration/users_signup_test.rb:44:in `block in <class:UsersSignupTest>' 

    41/41: [=========================================================================================================] 100% Time: 00:00:01, Time: 00:00:01 

Finished in 1.78481s 
41 tests, 173 assertions, 1 failures, 0 errors, 0 skips 

這是一個包含主要的錯誤(FAIL)的文件,根據該報告它應該是 '斷言user.reload.activated?':

require 'test_helper' 

class UsersSignupTest < ActionDispatch::IntegrationTest 

    def setup 
    ActionMailer::Base.deliveries.clear 
    end 

    test "invalid signup information" do 
    get signup_path 
    assert_no_difference 'User.count' do 
     post users_path, user: { name: "", 
           email: "[email protected]", 
           password:    "foo", 
           password_confirmation: "bar" } 
    end 
    assert_template 'users/new' 
    assert_select 'div#error_explanation' 
    assert_select 'div.alert.alert-danger' 
    end 

    test "valid signup information with account activation" do 
    get signup_path 
    assert_difference 'User.count', 1 do 
     post users_path, user: { name: "Example User", 
           email: "[email protected]", 
           password:    "password", 
           password_confirmation: "password" } 
    end 
    assert_equal 1, ActionMailer::Base.deliveries.size 
    user = assigns(:user) 
    assert_not user.activated? 
    # Try to log in before activation. 
    log_in_as(user) 
    assert_not is_logged_in? 
    # Invalid activation token 
    get edit_account_activation_path("invalid token") 
    assert_not is_logged_in? 
    get edit_account_activation_path(user.activation_token, email: 'wrong') 
    assert_not is_logged_in? 
    get edit_account_activation_path(user.activation_token, email: user.email) 
    assert user.reload.activated? 
    follow_redirect! 
    assert_template 'users/show' 
    assert is_logged_in? 
    end 
end 

-

您還可以檢查Git Repository

我的倉庫

如果有人能夠幫助我解決這個問題,我將非常感激,它會爲我節省寶貴的時間。

回答

0

你的測試本身看起來不錯,但他們似乎在點要失敗的,當你聲稱,一旦你嘗試編輯其帳戶激活信息的用戶實際上已經被激活:

get edit_account_activation_path(user.activation_token, email: user.email) 
assert user.reload.activated? # <= test fails here 

在在account_activations_controller.rb文件在您的回購,你有:

def edit 
    user = User.find_by(email: params[:email]) 
    if user && !user.activated? && user.authenticated?(:activation, params[:id]) 
    user.activate # <= here's where you're activating the user 
    log_in user 
    flash[:success] = "Account activated!" 
    redirect_to user 
    else 
    flash[:danger] = "Invalid activation link" 
    redirect_to root_url 
    end 
end 

看着你user.rb類,不過,它似乎是你實際上是缺少activate方法完全(這是一個恥辱電子恐怖消息似乎沒有向你表明這一點)。因此,將以下方法添加到您的User模型,並嘗試再次運行規格:

編輯

the point where your tests went red檢查出你的回購後,我現在可以看到,這個問題是在你的SessionsHelper#redirect_back_or方法:

def redirect_back_or(default) 
    redirect_to(session[:forwarding_url] || default) 
    session.delete[:forwarding_url] 
end 

session.delete[:forwarding_url]session.delete(:forwarding_url),帶括號的而不是方括號。

+0

感謝您的評論,但我不認爲這是問題在這裏。我跟着邁克爾哈特爾的書以及激活方法部分出現在下一頁,但現在測試應該是綠色的。無論如何,我嘗試添加激活方法,但它仍然會進行RED測試。在我的sessions_controller.rb中,我有一個名爲message的變量,我認爲它與此有關,但我似乎無法弄清楚它是什麼。無論如何,感謝您的幫助。 – luissimo

+0

@luissimo我想我已經找到你的問題。絕對是一個容易犯的錯誤:) –

+0

剛纔看到你的評論一段時間後,我已經解決了這個問題,但是你是對的,那是問題。無論如何,這是一個很好的答案。乾杯。 – luissimo

1

我認爲這個問題可以歸結爲以下兩行:

assert_select 'div#<error_explanation>' 
assert_select 'div.<alert alert-danger>' 

這些都需要有效的CSS選擇器作爲錯誤概述。他們不是。固定版本可能是:

assert_select 'div#error_explanation' 
assert_select 'div.alert.alert-danger' 

這真的取決於你的風格。記住這些工作就像jQuery,所以它們類似於$('div#error_explanation')

+0

感謝您解決這個問題,但那不是這裏的主要問題。我現在有這個問題一段時間了,不知道如何解決它。所以感謝幫助我,但主要問題是別的,因爲我仍然在解決該問題後得到相同的錯誤/失敗。 – luissimo

+0

另一個錯誤是使用'redirect_back_or',儘管你沒有展示它是如何實現的或者它甚至被調用。它需要一個參數,你沒有指定一個參數。這些消息通常充滿了提示,所以請嘗試更多地閱讀它們。起初可能有點混亂,但隨着時間的推移,你會發現它的眼睛。 – tadman

+0

感謝您幫助我解決大問題,但主要錯誤仍然存​​在:p任何想法可能意味着什麼?我經歷了所有相關文件至少100次,但我認爲此刻im轉向codeblind。 – luissimo

相關問題