Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Hartl'的注销错误;s RubyonRails教程8.3_Ruby On Rails - Fatal编程技术网

Ruby on rails Hartl'的注销错误;s RubyonRails教程8.3

Ruby on rails Hartl'的注销错误;s RubyonRails教程8.3,ruby-on-rails,Ruby On Rails,我在MichaelHartl的RubyonRails教程8.3中的用户登录测试中遇到了断言选择问题 这就是测试: 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_redirecte

我在MichaelHartl的RubyonRails教程8.3中的用户登录测试中遇到了断言选择问题

这就是测试:

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_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   
当我运行测试时,我得到1个失败:

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 at least 1 element matching "a[href="/login"]", found 0..
    Expected 0 to be >= 1.
    test/integration/users_login_test.rb:31:in `block in <class:UsersLoginTest>'
会话\u控制器:销毁

 def destroy
    log_out
    redirect_to root_url
  end

首先尝试查看您的路由中是否有登录路径

rake routes | grep 'login'
你应该有这些:

login GET    /login(.:format)          sessions#new
      POST   /login(.:format)          sessions#create
然后,由于您的错误:

Expected at least 1 element matching "a[href="/login"]", found 0..

这意味着它找不到一个

您正在参考Hartl教程的第8.3节,但看起来您已经开始学习下一节了。这就是实现持久会话的地方

我知道,因为你的代码中有一些“记住”的东西。例如:

def remember(user)
  user.remember
  cookies.permanent.signed[:user_id] = user.id
  cookies.permanent[:remember_token] = user.remember_token
end
您的测试失败了,因为您可能有一个活动的记忆令牌cookie,但是您的
注销方法不会“忘记”它。基本上,您只完成了Hartl部分的一半;所以测试自然会失败(证明测试有效!)


如果您继续学习本教程,它将引导您完成注销时忘记此cookie的过程。或者,您可以回溯并删除在8.3之后放置的位。无论哪种方式,该测试都应该通过。

你能从会话控制器发布代码吗?是的,我不想过载,不知道需要什么,但我现在就发布。OP已经确认没有在浏览器中看到登录链接:“我仍然登录(在角落里,我仍然有指向我的个人资料、设置和注销的链接)。”好的@dwenzel你可以发布你的视图(你输出你的登录注销信息的部分---导航栏)吗?你可以把你的助手的内容放到destroy函数中吗
Session.delete(:user\u id)@current\u user=nil
和comment#log\u你也可以为销毁控制器发布你的
参数的内容吗?我可能和其他懒惰的程序员一样,跳过了最后一行布局/\u header.html.erb:
  • 我没有注意最后一段代码。需要更改为
  • 。这个答案有帮助。事实上,正如其他人所说,证明测试是有效的。是的,我想就是这样,在添加了returnfalse if‘memory_digest.nil’之后,一切都开始起作用了。谢谢
    login GET    /login(.:format)          sessions#new
          POST   /login(.:format)          sessions#create
    
    Expected at least 1 element matching "a[href="/login"]", found 0..
    
    def remember(user)
      user.remember
      cookies.permanent.signed[:user_id] = user.id
      cookies.permanent[:remember_token] = user.remember_token
    end