如何使用rspec在控制器中测试自定义路由

Oat*_*eal 9 testing controller rspec ruby-on-rails

我在routes.rb中定义了一个自定义路由

get "packages/city/:location_id",  to: "packages#index"
Run Code Online (Sandbox Code Playgroud)

controller_spec.rb,

get :index
Run Code Online (Sandbox Code Playgroud)

给出了这个错误,

ActionController::UrlGenerationError:
   No route matches {:action=>"index", :controller=>"packages"}
Run Code Online (Sandbox Code Playgroud)

如何在控制器规范中明确指定自定义路由?

小智 13

如果您宣布这样的路线,也许会有所帮助?

get "packages/city/:location_id" => "packages#index"
Run Code Online (Sandbox Code Playgroud)

记得location_id在规格中提供一个参数,例如get :index, location_id: 1.


zar*_*tra 9

2017年

我尝试了上面的解决方案,但他们没有工作.我有:

ArgumentError:
   unknown keyword: location_id
Run Code Online (Sandbox Code Playgroud)

似乎RSpec现在需要一个params参数.相应的调用如下所示:

get(:index, params: { location_id: 123 })
Run Code Online (Sandbox Code Playgroud)