0

還有一些其他線程可以解決這個問題,但是他們都沒有幫助我們解決我們的問題。NoMethodError:未定義的方法`email'爲零:NilClass

當我們運行我們與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 

An Ÿ想法爲什麼我們得到這個NoMethodError: undefined method 'email' for nil:NilClass錯誤以及如何解決?

回答

1

這是因爲@user未在您的設置方法中初始化。您初始化了@admin@non_admin,但不是@user

+0

謝謝,它確實解決了這個問題。 –

相關問題