"names-6ren">
gpt4 book ai didi

ruby-on-rails - 通过 Rails 中的 assert_routing 测试具有主机约束的路由

转载 作者:行者123 更新时间:2023-12-04 06:32:21 25 4
gpt4 key购买 nike

我有一个路由,我使用约束来检查主机,然后是一个基本相同但没有主机限制的路由(这些实际上是命名空间,但为了使事情变得简单,这个例子会做):

 match "/(:page_key)" => "namespace_one/pages#show", :constraints => proc {|env| env['SERVER_NAME'] == 'test.mysite.local' }

match "/(:page_key)" => "namespace_two/pages#show"

这些在通过浏览器访问时和在定义主机和执行集成测试时完全按预期工作 get "/page_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"}>

如果我尝试在约束过程中转储 env,我得到的只是 --- :controller .

如果我摆脱了 assert_routing 并只做一个 get :show调用并转储 @controller它确实解析为正确的 Controller (正如预期的那样,因为这些路由都可以通过 HTTP 请求正常工作)。

最佳答案

自己刚遇到这个问题。这是由 Rails 补丁修复的,该补丁允许您在路由测试中指定完整的 url。
将您的测试更改为

assert_routing 'http://test.mysite.local', { :controller => 'namespace_one/pages', 
:action => 'show' }
它会正常工作。
您必须在完整的 url 中包含“://” b/c rails 使用正则表达式在路径中查找 %r{://} 否则它会自动破解 url 的主机部分,并且测试将出错了。

关于ruby-on-rails - 通过 Rails 中的 assert_routing 测试具有主机约束的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2409475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com