Ruby on rails 迈克尔·哈特尔教程第8章中的测试失败

Ruby on rails 迈克尔·哈特尔教程第8章中的测试失败,ruby-on-rails,ruby,railstutorial.org,Ruby On Rails,Ruby,Railstutorial.org,我正在学习MichaelHartl的Rails教程,由于记忆测试失败,我被困在第8.4.6章。 我不知道下一步该怎么办 这是测试结果 FAIL["test_login_with_remembering", UsersLoginTest, 2015-08-25 15:26:59 +0100] test_login_with_remembering#UsersLoginTest (1440512819.22s) Expected nil to not be nil. test/i

我正在学习MichaelHartl的Rails教程,由于记忆测试失败,我被困在第8.4.6章。 我不知道下一步该怎么办

这是测试结果

 FAIL["test_login_with_remembering", UsersLoginTest, 2015-08-25 15:26:59 +0100]
 test_login_with_remembering#UsersLoginTest (1440512819.22s)
    Expected nil to not be nil.
    test/integration/users_login_test.rb:52:in `block in <class:UsersLoginTest>'
Users.yml

microte:
      name: Lord Microte
      email: lord@microte.com
      password_digest: <%= User.digest('password') %>

如果有人能帮上忙,我将不胜感激。

我也有同样的问题。我已经尝试了很多方法来通过测试,奇怪的是cookie['remember_token']只有在测试环境中才是零,而在开发环境中一切都很好,我可以通过在浏览器上检查来查看remember_token cookie。 总之,我完成了这一章,开始了第二个练习,猜猜看? 在session_helper.rb的当前_user方法中将user定义为实例变量@user,并使用assert_equal cookies['memory_token'],分配:user.memory_digest进行测试通过

我不知道为什么在8.15的教程中列出的测试是绿色的,因为无论我去哪里看,我都发现有人有同样的问题


希望这会有所帮助。

也遇到了同样的问题,并再次阅读了本章-可在我的应用程序/helpers/sessions\u helper.rb中找到

ENV['RAILS_ENV'] ||= 'test'
    require File.expand_path('../../config/environment', __FILE__)
    require 'rails/test_help'
    require "minitest/reporters"
    Minitest::Reporters.use!

    class ActiveSupport::TestCase
      # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
      fixtures :all

      # Add more helper methods to be used by all tests here...

      # Returns true if a test user is logged in.
      def is_logged_in?
        !session[:user_id].nil?
      end

      # Log in a test user.
      def log_in_as(user, options = {})
        password = options[:password]     || 'password'
        remember_me = options[:remember_me]  || '1'
        if integration_test?
          post login_path, session: { email:        user.email, 
                                      password:     password,
                                      remember_me:  remember_me }
        else
          session[:user_id] = user.id
        end
      end

        private

        # Returns true inside an integration test.
        def integration_test?
          defined?(post_via_redirect)
        end
    end
def remember(user)
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent.signed[:remember_token] = user.remember_token
end
def log_in_as(user, options = {})
    password = options[:password]     || 'example'
而不是:

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

希望有帮助

我也有同样的问题,这是因为yml文件中的密码摘要 你需要选择一个并致力于它

例: 在yml文件中:

password_digest: <%= User.digest('example') %>
和在用户登录测试.rb中

require 'test_helper'

    class UsersLoginTest < ActionDispatch::IntegrationTest

      def setup
        @user = users(:microte)
      end

      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

      test "login with valid information" do
        get login_path
        post login_path, session: { email: @user.email, password: 'microte' }
        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)
      end

      test "login with valid information followed by logout" do
        get login_path
        post login_path, session: { email: @user.email, password: 'microte' }
        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
        # simulate a user clicking logout in a second window.
        delete logout_path
        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

        test "login with remembering" do
        log_in_as(@user, remember_me: '1')
        assert_not_nil cookies['remember_token'] #line 52
      end

      test "login without remembering" do
        log_in_as(@user, remember_me: '0')
        assert_nil cookies['remember_token']
      end
    end
post login_path, session: { email: @user.email, password: 'example' }

接下来您可能要做的一件事是为我们突出显示哪一行是users\u login\u test.rb的第52行。。。我不能算那么多,所以非常感谢您帮助识别导致错误的实际行。我只是添加了一条注释来识别它。好的,现在看看log_in_as方法在您的测试中做了什么似乎会有帮助。@SunilD。我插入了test_helper.rb来显示log_in_as方法所做的工作。我在这上面呆了几个星期。我觉得问题是从我的末日到第八章的重新开始。谢谢你的提醒。这两个片段看起来一样。和这个问题有相同的问题,这个问题解决了。
post login_path, session: { email: @user.email, password: 'example' }