gpt4 book ai didi

ruby-on-rails - Rails Engine (4.0.2) 路由方法在使用 MiniTest 的 Controller 中失败

转载 作者:行者123 更新时间:2023-12-04 06:23:27 26 4
gpt4 key购买 nike

我能够从我的 ActionController::TestCase 派生测试中成功调用引擎 Controller 中的操作:

test "should get new" do
get :new, {'form_id' => '1-2', use_route: :engine_controllers}
assert_response :success
assert_match(/Hello World/, @response.body)
end

但是在 Controller 或 View 中引用路由方法时出现错误。具体来说,从以下路线:
    Routes for FormEngine::Engine:
GET /:form_id(.:format) form_engine/submissions#new
submissions POST /:form_id(.:format) form_engine/submissions#create
POST /payment_info/:id(.:format) form_engine/submissions#update
submission GET /submissions/:id(.:format) form_engine/submissions#show

这些故意不是 Restful 路线。

当我引用 submissions_pathform_engine.submissions_path我在测试运行中收到以下错误:
ActionController::UrlGenerationError: No route matches {:controller=>"form_engine/submissions", :action=>"create"} missing required keys: [:form_id]

运行服务器时我没有收到此错误。我得到了预期的路径: /form_engine/1-2
我已经将问题追溯到作为服务器运行时的事实 request.path_parameters:form_id在其中,但在测试用例中运行 request.path_parameters是空的。

在非发动机 Controller 测试案例中, request.path_parameters正确具有路径参数。据我所知,在
actionpack (4.0.2) lib/action_controller/test_case.rb:189:
extra_keys = routes.extra_keys(parameters)

最终将所有参数列为额外的键并添加到 non_path_parameters。我还没有弄清楚在 routes.extra_keys 中是什么错误,因此 :form_id 被列为额外的键。

我猜路由正在丢失 use_route或类似的东西。

我发现了一个有点类似的问题,但我不确定它是否真的相关:
Rails 3.2 Engines - routes not working in test cases .到目前为止,还没有一个令人满意的答案。

如果有人能看到我犯的明显错误或知道解决方法,我很乐意听到。

提前致谢。

最佳答案

我在 Ruby on Rails Engine Guide 中找到了解决方案(对我而言)

module MyEngineName
class FooControllerTest < ActionController::TestCase
setup do
@routes = Engine.routes
end

def test_index
get :index
...
end
end
end

关于ruby-on-rails - Rails Engine (4.0.2) 路由方法在使用 MiniTest 的 Controller 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294260/

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