Logout Error with Hartl's Ruby on Rails Tutorial 8.3 -


i'm having problem assert_select in users_login_test in 8.3 of michael hartl's ruby on rails tutorial.

this test:

test "login valid information followed logout"    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_not is_logged_in?    assert_redirected_to root_url    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    

when run test 1 failure:

fail["test_login_with_valid_information_followed_by_logout",     userslogintest, 2016-01-20 09:51:41 +0000] test_login_with_valid_information_followed_by_logout#userslogintest (1453283501.83s)     expected @ least 1 element matching "a[href="/login"]", found 0..     expected 0 >= 1.     test/integration/users_login_test.rb:31:in `block in <class:userslogintest>' 

here sessions controller:

class sessionscontroller < applicationcontroller  def new  end def create  user = user.find_by(email: params[:session][:email].downcase)  if user && user.authenticate(params[:session][:password])    log_in user    remember user    redirect_to user  else    flash.now[:danger] = 'invalid email/password combination'    render 'new'  end  end         def destroy    log_out    redirect_to root_url  end  end 

my sessions_controller has destroy method redirects root_url. not sure problem know test fails , when try logout redirected main page still logged in (in corner still have links profile, settings , logout).

@papouche guinslyzinho asked me post views, helper , destroy controller:

view: header.html.rb

      <header class="navbar navbar-fixed-top navbar-inverse">         <div class="containter">            <%= link_to "sample app", root_path, id: "logo" %>           <nav>             <ul class="nav navbar-nav navbar-right">               <li><%= link_to "home", root_path %></li>               <li><%= link_to "help", help_path %></li>           <%if logged_in? %>           <li><%= ;link_to "users", "#"%></li>           <li class="dropdown">             <a href="#" class="dropdown-toggle" data-toggle="dropdown">               account <b class="caret"></b>               </a>               <ul class="dropdown-menu">                 <li><%= link_to "profile", current_user %></li>                 <li><%= link_to "settings", "#" %></li>                 <li class="divider"></li>                 <li> <%= link_to "log out", logout_path, method: "delete" %>                  </li>               </ul>           </li>           <%else %>           <li><%= link_to "log in", login_path %></li>           <%end %>         </ul>       </nav>     </div>   </header> 

sessions_helper:

module sessionshelper    #logs in given user   def log_in(user)     session[:user_id] = user.id   end    #remembers user in session   def remember(user)     user.remember     cookies.permanent.signed[:user_id] = user.id     cookies.permanent[:remember_token] = user.remember_token   end    #returns user corresponding remember token cookie   def current_user     if (user_id = session[:user_id])       @current_user ||= user.find_by(id: user_id)       elsif(user_id = cookies.signed[:user_id])       user = user.find_by(id: user_id)       if user && user.authenticated?(cookies[:remember_token])         log_in user         @current_user = user       end     end   end    #returns true if user logged in, false otherwise   def logged_in?     !current_user.nil?   end    def log_out       session.delete(:user_id)       @current_user = nil   end     #forgets persistent session   def forget(user)     user.forget     cookies.delete(:user_id)     cookies.delete(:remember_token)   end    #logs out current user   def      forget(current_user)     session.delete(:user_id)     @current_user = nil   end   end 

sessions_controller: destroy

 def destroy     log_out     redirect_to root_url   end 

you referencing section 8.3 of hartl tutorial, looks you've started work on next section, remember me. implement persistent sessions.

i can tell, because have 'remember' stuff in code. example:

def remember(user)   user.remember   cookies.permanent.signed[:user_id] = user.id   cookies.permanent[:remember_token] = user.remember_token end 

your test failing, because have active remember token cookie, log_out method doesn't 'forget' it. essentially, you've half-completed hartl's section; tests naturally failing (proof tests work!)

if continue along tutorial, guide through process of forgetting cookie when logging out. or, can backtrack , remove bits put after 8.3. either way, test should pass.


Comments

Popular posts from this blog

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -