2016-04-26 4 views
0

Ich bin momentan im Ruby on Rails Tutorial von Autor Michael Hartl. Und ich in Kapitel 10.1.4 stecken geblieben, wo der Test GREEN sein sollte, aber ist derzeit RED, das ist die Fehlermeldung:10.1.4 michael hartl's ruby ​​on rails tutorial TEST ROT

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 

Dies ist die Datei, die die Hauptfehler (FAIL) enthält, nach dem Bericht es sollte 'user.reload.activated behaupten?' werden:

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 

-

können Sie auch auf Git Repository mein Repository prüfen

Wenn mir jemand mit diesem Problem helfen könnte, wäre es sehr geschätzt und es würde mir wertvolle Zeit sparen.

Antwort

0

Ihre Tests selbst gut aussehen, aber sie scheint an der Stelle fehlerhaft zu sein, wenn Sie behaupten, dass ein Benutzer tatsächlich, wenn Sie die Kontoaktivierungsinformationen zu bearbeiten versucht haben, aktiviert:

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

In die account_activations_controller.rb Datei in Ihrem Repo, Sie haben:

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 

in Ihrer user.rb Klasse suchen, obwohl, so scheint es, dass Sie tatsächlich die activate Methode fehlen vollständig (es ist eine Schande, dass das e Fehlermeldung scheint dies nicht anzuzeigen). So fügen Sie die folgende Methode, um Ihre User Modell und versuchen, die Spezifikationen läuft wieder:

bearbeiten

nach dem Repo bei the point where your tests went red Check-out, kann ich jetzt sehen, dass dieses Problem in Ihrem SessionsHelper#redirect_back_or ist Methode:

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

session.delete[:forwarding_url]session.delete(:forwarding_url), mit Klammern statt eckigen Klammern sein sollte.

+0

Danke für das Kommentieren, aber ich glaube nicht, dass das das Problem hier ist. Ich komme mit dem Buch von Michael Hartl und der Aktivierungsmethode Teil kommt auf der nächsten Seite aber der Test sollte jetzt grün sein. Ich habe versucht, die Aktivierungsmethode trotzdem hinzuzufügen, aber es gibt immer noch einen ROT-Test. In meiner sessions_controller.rb habe ich eine Variable namens Nachricht, ich denke, es hat etwas damit zu tun, aber ich kann nicht herausfinden, was es ist. Danke trotzdem für deine Hilfe. – luissimo

+0

@luissimo Ich denke, ich habe dein Problem gefunden. Definitiv ein einfacher Fehler zu machen :) –

+0

Ich sah Ihren Kommentar nach einer Weile und ich hatte dieses Problem bereits behoben, aber Sie hatten Recht, das war das Problem. Also eine Plus-Antwort für dich sowieso. Prost. – luissimo

1

denke ich, das Problem auf diese beiden Linien läuft darauf hinaus:

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

Diese müssen gültige CSS-Selektoren sein, wie in der Fehler skizziert. Sie sind nicht. Eine feste Version könnte sein:

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

Es hängt wirklich von Ihren Stilen ab. Denken Sie daran, dass diese Arbeit genau wie jQuery funktioniert, also analog zu $('div#error_explanation').

+0

Vielen Dank für die Behebung dieses Problems, aber das ist nicht das Hauptproblem hier. Ich hatte dieses Problem schon eine Weile und wusste nicht, wie ich es beheben sollte. Also danke, dass du mir dabei hilfst, aber das Hauptproblem ist etwas anderes, da ich immer noch die gleichen Fehler bekomme/scheitere, nachdem ich dieses Problem behoben habe. – luissimo

+0

Der andere Fehler ist mit 'redirect_back_or' zu tun, obwohl Sie nicht gezeigt haben, wie das implementiert ist oder wo es überhaupt aufgerufen wird. Es erfordert ein Argument und Sie haben keins angegeben. Diese Nachrichten sind in der Regel voll von Hinweisen, also versuchen Sie es besser zu lesen. Es kann zunächst ein wenig verwirrend sein, aber mit der Zeit wirst du ein Auge dafür entwickeln. – tadman

+0

Danke, dass du mir geholfen hast, aber der Hauptfehler ist immer noch da: Was denkst du, was das bedeuten könnte? Ich habe mindestens 100 mal alle relevanten Dateien durchgegangen, aber ich vermute, dass ich im Moment Codeblind mache. – luissimo