Rails - 如何在测试中动态调用请求方法“get put destroy etc”

时间:2010-05-29 05:09:32

标签: ruby-on-rails ruby dynamic

我总是编写测试来检查我的控制器根据他们的状态限制人们的某些操作,即登录,管理员?等等 无论是获取:index还是put to:创建代码总是一样的。我正在尝试重构这个,以便我有一个方法,如

should_redirect_unauthenticated_to_login_action(request, action)

并称之为

should_redirect_unauthenticated_to_login_action(:get, :index)  => get :index

但不确定如何动态调用各种响应方法rails提供的功能测试似乎存在于模块ActionController中

我用

打乱了
module = Kernel.const_get("ActionController")
module::TestProcess.get
NoMethodError: undefined method `get' for ActionController::TestProcess:Module

任何人都可以提供帮助(我对ruby中的动态调用非常新)

3 个答案:

答案 0 :(得分:1)

这可以在你的测试帮助器中,也可以在任何可以混合到功能测试中的模块中进行。

def should_redirect_unauthenticated_to_login_action(http_method, action, params = {})
  send http_method, action, params
  should_be_cool_and_stuff # assertions or whatever else goes here.
end

答案 1 :(得分:0)

Object::send您要找的是什么?

2.send(:+, 233) # --> 235
"Cake".send :reverse # --> "ekaC"

Kernel.const_get("A").const_get("B").send :cake; # runs A::B.cake

答案 2 :(得分:0)

将路径与HTTP方法(获取,发布等)组合映射到控制器和方法是由路由完成的,而不是由控制器本身完成的。因此,如果您想测试“GET”/“用户”之后会发生什么,并且可能想要测试重定向,那么IntegrationTest就是您的选择:

get '/users'
assert_redirected_to :login

希望这有帮助