使用 Minitest 访问控制器实例变量
Accessing controller instance variables with Minitest
我正在尝试使用 minitest 访问我的控制器中的实例变量。
例如:
microposts_controller.rb:
def destroy
p "*"*40
p @cats = 42
end
我如何使用 minitest 在 microposts_controller_test.rb
内部测试 @cats
的值?
我知道我可以从浏览器提交 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
被输出。
我在这里错过了什么?
我有一个 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
您可以使用 view_assigns
:
# asserts that the controller has set @cats to true
assert_equal @controller.view_assigns['cats'], true
我正在尝试使用 minitest 访问我的控制器中的实例变量。
例如:
microposts_controller.rb:
def destroy
p "*"*40
p @cats = 42
end
我如何使用 minitest 在 microposts_controller_test.rb
内部测试 @cats
的值?
我知道我可以从浏览器提交 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
被输出。
我在这里错过了什么?
我有一个 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
您可以使用 view_assigns
:
# asserts that the controller has set @cats to true
assert_equal @controller.view_assigns['cats'], true