对通过定制路由调用的控制器方法进行单元测试

| 如何对通过自定义路由调用的控制器方法进行单元测试? 相关路线是:
/auth/:provider/callback(.:format) {:controller=>\"sessions\", :action=>\"create\"}
在ѭ1的规格中,我不能仅使用
get :create
,因为该路由不存在。如果我也使用
get /auth/facebook/callback/
,它将告诉我
No route matches {:controller=>\"sessions\", :action=>\"/auth/facebook/callback\"}
。 似乎我不能只使用
controller.create
,因为I6ѭ会从
request
哈希访问某些键,即使我在spec文件中设置了request.env [\'something \'],它也会重定向到另一个路径。     
已邀请:
        功能测试应测试每个动作的功能 (给定一组参数) 至关重要的是,您应该使功能测试与路线脱钩。 (否则,路由抽象的重点是什么) 在test :: unit中,功能测试看起来像这样
test \"#{action_name} - does something\" do
  #{http_verb} :#{action_name}, :params => {:their => \"values\"}
  assert_response :#{expected_response}
end
注意,我们没有提到任何地方的路由。 因此是您创建的真实示例
test \"create - creates a session\" do
  get :create, :provider => \"your provider\"
  assert_response :success
end
如果Rails与该请求的路由不匹配,它将阻塞。 如果这样不起作用,建议您检查两件事 \“ get \”是正确的http动词 您的路线中没有其他必需的参数(我可以看到:provider是其中之一) 如果我对路由做任何古怪的事情, 我通常会添加一个单独的测试。
test \"create - routing\" do
  assert_recognizes({
    :controller => \"sessions\",
    :action => \"create\",
    :provider => \"yourProvider\"
    }, \"/auth/yourProvider/callback\")
end
只要这与您的行动测试相符 一切都应该很好。     

要回复问题请先登录注册