2016-12-04 49 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 

我期待看到controller物体内部的@cats实例变量。我也期待看到42正在输出。

我在这里错过了什么?

回答

0

我有一个before_action,检查以确保用户登录,所以delete请求得到重定向。

我也有一个测试助手,将有效的用户ID放入会话中。使用一切正常:)

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