2016-03-27 24 views
0

başarısız neden emin. Benim denemem:Michael Hartl'ın Ruby on Rails Eğiticisi ch 8.3 | Bu testin bu RoR app içine ve dışına günlüğü sınamak çalışıyorum

test "login with valid information followed by logout" do 
    get login_path 
    post login_path, session: { email: @user.email, password: 'password' } 
    assert is_logged_in? 
    assert_redirected_to @user 
    follow_redirect! 
    assert_template 'users/show' 
    assert_select "a[href=?]", login_path, count: 0 
    assert_select "a[href=?]", logout_path 
    assert_select "a[href=?]", user_path(@user) 
    delete logout_path 
    assert_redirected_to root_url 
    assert_not is_logged_in? # <-- this line is the one that cocks up. 
    follow_redirect! 
    assert_select "a[href=?]", login_path 
    assert_select "a[href=?]", logout_path,  count: 0 
    assert_select "a[href=?]", user_path(@user), count: 0 
end 

Etiketli satır, başarısız olan tek satırdır ve neden emin değilim. Tam olarak kitabın kendisiyle aynı.

bu işlev için çıkış yolu güzergahlarına bir silme isteği gönderme:

def logout 
    session.delete(:user_id) 
    @current_user = nil 
end 

Ve is_logged_in:

def destroy 
    logout 
    redirect_to root_url 
end 

çıkış fonksiyonu şudur? Bu fonksiyon:

def is_logged_in? 
    !current_user.nil? 
end 

Bunların hepsi, kitabın tam olarak olması gerektiği gibi, isimlere kadar olan yoldur. (Kendi daha iyi isimlerim vardı, ama onları çaresizlikten değiştirdim.)

Site sadece iyi çalışıyor gibi görünüyor. Bir bağlantı için Here's kendiniz görebilirsiniz. Sadece giriş yapabilirim.

Başka bir yerde assert_not kullanıyorum ve gayet iyi çalıştı. Örneğin:

test "login with invalid information" do 
    get login_path 
    assert_template 'sessions/new' 
    post login_path, session: { email: "", password: "" } 
    assert_template 'sessions/new' 
    assert_not flash.empty? 
    get root_path 
    assert flash.empty? 
end 

Bu sınama başarılı. ('Flash', sayfanın üst kısmında, kullanıcının oturum açma bilgilerinin geçersiz olduğunu bildiren küçük bir kutuyu ifade eder.)

Herhangi bir fikri olan var mı? Çok teşekkürler.

cevap

0

Eğiticiye şu ana kadar oturumları kullanmalı ve logout yönteminde bir oturumu silerken görebiliyorum.

Ayrıca

, "yardımcı yöntemler biz 8.15 Liste olarak current_user kullanamaz, testlerde mevcut değildir, ancak session yöntem kullanılabilir"

Sizin is_logged_in? yöntem bu daha sonra aşağıdaki gibi görünmelidir:

def is logged_in? 
    !session[:user_id].nil? 
end 
+0

Tamam iyi senin yöntemini denedik ve şimdi gayet iyi çalışıyor. Teşekkür ederim çok teşekkürler! –

+0

@LlamaTarianism yup no problem :) –