NoMethodError: undefined method `email' for nil:NilClass

NoMethodError: undefined method `email' for nil:NilClass

还有一些其他线程在解决这个问题,但其中 none 帮助我们解决了问题。

当我们 运行 使用 Minitest 进行集成测试时,我们得到以下 ERROR:

ERROR["test_index_including_pagination", UsersIndexTest, 2015-06-30 06:44:19 -0700]
 test_index_including_pagination#UsersIndexTest (1435671859.78s)
NoMethodError:         NoMethodError: undefined method `email' for nil:NilClass
            test/test_helper.rb:20:in `log_in_as'
            test/integration/users_index_test.rb:11:in `block in <class:UsersIndexTest>'
        test/test_helper.rb:20:in `log_in_as'
        test/integration/users_index_test.rb:11:in `block in <class:UsersIndexTest>'

这是我们的 test_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
  fixtures :all

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

  # Logs 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

这是我们 users_index_test.rb 文件的第一部分:

require 'test_helper'

class UsersIndexTest < ActionDispatch::IntegrationTest

  def setup
    @admin     = users(:michael)
    @non_admin = users(:archer)
  end

  test "index including pagination" do
    log_in_as(@user)
    get users_path
    assert_template 'users/index'
    assert_select 'div.pagination'
    User.paginate(page: 1).each do |user|
      assert_select 'a[href=?]', user_path(user), text: user.first_name + " " + user.first_name
    end
  end

知道为什么我们会收到此 NoMethodError: undefined method 'email' for nil:NilClass 错误以及如何解决它吗?

这是因为 @user 没有在您的设置方法中初始化。您初始化了 @admin@non_admin,但没有初始化 @user