Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过Rails中的assert_路由测试具有主机约束的路由_Ruby On Rails_Unit Testing_Routing_Ruby On Rails 3_Testunit - Fatal编程技术网

Ruby on rails 通过Rails中的assert_路由测试具有主机约束的路由

Ruby on rails 通过Rails中的assert_路由测试具有主机约束的路由,ruby-on-rails,unit-testing,routing,ruby-on-rails-3,testunit,Ruby On Rails,Unit Testing,Routing,Ruby On Rails 3,Testunit,我有一个路由,我使用约束来检查主机,然后是一个基本相同但没有主机限制的路由(这些实际上是名称空间,但为了简单起见,本例将执行此操作): 在通过浏览器访问时,以及在定义主机和执行get”/page\u key等操作时的集成测试中,这些操作与预期完全相同 但是,我想编写一些测试,以确保这些路由工作到目前为止,我没有太多的运气,因为以下测试(目前在ActionController::IntegrationTest中,因此我可以设置主机)与没有约束的测试相匹配: assert_routing '', {

我有一个路由,我使用约束来检查主机,然后是一个基本相同但没有主机限制的路由(这些实际上是名称空间,但为了简单起见,本例将执行此操作):

在通过浏览器访问时,以及在定义主机和执行
get”/page\u key
等操作时的集成测试中,这些操作与预期完全相同

但是,我想编写一些测试,以确保这些路由工作到目前为止,我没有太多的运气,因为以下测试(目前在
ActionController::IntegrationTest
中,因此我可以设置主机)与没有约束的测试相匹配:

assert_routing '', { :controller => 'namespace_one/pages', :action => 'show' }
=> The recognized options <{"action"=>"show", "controller"=>"frontend/pages"}> 
   did not match <{"action"=>"show", "controller"=>"namespace_two/pages"}>, 
   difference: <{"controller"=>"namespace_one/pages"}>
assert_routing',{:controller=>'namespace_one/pages',:action=>'show'}
=>识别的选项“显示”、“控制器”=>“前端/页面”}>
与“show”、“controller”=>“namespace\u two/pages”}>不匹配,
差异:“名称空间\一页/页”}>
如果我尝试在constraints proc中转储env,我得到的是
--:controller


如果我去掉assert_路由,只需执行一个
get:show
调用并转储
@controller
,它就可以解析到正确的控制器(正如预期的那样,因为这些路由都可以通过HTTP请求正常工作)。

我自己也有这个问题。Rails补丁修复了这一问题,它允许您在路由测试中指定完整的URL

将测试更改为

assert_routing 'http://test.mysite.local', { :controller => 'namespace_one/pages', 
                                             :action => 'show' }
它会很好的工作

您必须在完整url中包含“://”,b/c rails使用正则表达式在路径中查找%r{://},否则它将自动删除url的主机部分,测试将出错

assert_routing 'http://test.mysite.local', { :controller => 'namespace_one/pages', 
                                             :action => 'show' }