2016-12-04 4 views
2

Я пытаюсь получить доступ к переменным экземпляра внутри моих контроллеров с помощью minitest.Доступ к переменным экземпляра контроллера с помощью Minitest

Например:

microposts_controller.rb:

def destroy 
    p "*"*40 
    p @cats = 42 
end 

Как бы проверить значение @cats с внутренним microposts_controller_test.rb с MiniTest?

Я знаю, что могу представить delete запрос от браузера и проверить мои логи сервера и найти:

"****************************************" 
42 

Я прочитал в another answer, что у меня есть доступ к assigns хэш со всеми переменными экземпляра, но Бесполезный Не работай. Я также пробовал искать внутри объекта controller. Показанный ниже:

microposts_controller.rb:

test "@cats should exist in destroy method" do 
    delete micropost_path(@micropost) 
    p controller.instance_variables 
    p assigns[:cats] 
end 

выход:

[:@_action_has_layout, :@_routes, :@_request, :@_response, :@_lookup_context, :@_action_name, :@_response_body, :@marked_for_same_origin_verification, :@_config, :@_url_options]0:04 
nil 

Я ожидал увидеть переменную @cats экземпляра внутри controller объекта. Я также ожидал, что выйдет .

Что мне здесь не хватает?

ответ

0

У меня был before_action, который проверяет, что пользователь вошел в систему, поэтому запрос delete был перенаправлен.

У меня также есть тестовый помощник, который будет помещать действительный идентификатор пользователя в сеанс. Используя, что все работает, как ожидалось :)

microposts_controller_test.rb:

test "@cats should exist?" do 
    log_in_as(users(:michael)) 
    delete micropost_path(@micropost) 
    p controller.instance_variables 
    p assigns[:cats] 
end 

test_helper.rb:

def log_in_as(user) 
    session[:user_id] = user.id 
end 

выход:

[:@_action_has_layout, :@_routes, :@_request, :@_response, :@_lookup_context, :@_action_name, :@_response_body, :@marked_for_same_origin_verification, :@_config, :@current_user, :@_params, :@micropost, :@cats, :@_url_options] 
42 
Смежные вопросы