2016-12-13 4 views
1

я собираюсь через Руби учебник Майкла Hartl и застрял в течение дня на неисправное испытаниеошибка NoMethodError в Rails

Я получаю это когда я бег:

Error: 
UsersControllerTest#test_should_redirect_edit_when_logged_in_as_wrong_user: 
NoMethodError: undefined method `session' for nil:NilClass 
test/test_helper.rb:19:in `log_in_as' 
test/controllers/users_controller_test.rb:37:in `block in <class:UsersControllerTest>' 

Вот код вызова :

require 'test_helper' 

class UsersControllerTest < ActionDispatch::IntegrationTest 

    def setup 
    @user  = users(:michael) 
    @otheruser = users(:archer) 
    end 

test "should redirect update when logged in as wrong user" do 
    log_in_as(@other_user) 
    patch user_path(@user), params: { user: { name: @user.name, 
               email: @user.email } } 
    assert flash.empty? 
    assert_redirected_to root_url 
    end 


*And here is the method I'm trying to call from the **test_helper** class:* 

# Log in as a particular user 
    def log_in_as(user) 
    session[:user_id] = user.id 
    end 
+0

Хороший совет, который я недавно получил от разработчика направляющих - когда застрял, пройдите через код с помощью «рельсов c» (командная строка рельсов). Удачи! –

ответ

0

вы включили эту строку кода: include SessionsHelper в вашем application_controller.rb?

Вы опечатка в способе настройки из приведенного выше кода: @otheruser = users(:archer) должен быть @other_user = users(:archer)

Проверьте снова код из тестового файла: тест/Контроллеры/users_controller_test.rb

особенно эта часть код:

test "should redirect edit when logged in as wrong user" do 
    log_in_as(@other_user) 
    get edit_user_path(@user) 
    assert flash.empty? 
    assert_redirected_to root_url 
    end 

Надеюсь, это поможет!

+0

SessionsHelper включен в application_controller.rb. Я также исправил эту опечатку, но это не помогло. Спасибо, что нашли. – user7288350

+0

У вас есть репо кода, который вы опубликовали? – Blackcoat77

+0

https://bitbucket.org/carldjensen/locumlair Спасибо. – user7288350

1

я пропускал часть в моем test_helper.rb класс:

class ActionDispatch::IntegrationTest 

    # Log in as a particular user. 
    def log_in_as(user, password: 'password', remember_me: '1') 
    post login_path, params: { session: { email: user.email, 
              password: password, 
              remember_me: remember_me } } 
    end 
end 

Спасибо за взгляд!

+0

Я рад, что вы его нашли! Работает ли он сейчас? – Blackcoat77