我已经定义了一个自定义路线 的routes.rb
get "packages/city/:location_id", to: "packages#index"
在controller_spec.rb
,
get :index
给出了这个错误,
ActionController::UrlGenerationError:
No route matches {:action=>"index", :controller=>"packages"}
如何在控制器规范中明确指定自定义路由?
答案 0 :(得分:11)
如果您宣布这样的路线,也许会有所帮助?
get "packages/city/:location_id" => "packages#index"
请务必在规范中提供location_id
参数,例如: get :index, location_id: 1
。
答案 1 :(得分:7)
我尝试了上面的解决方案,但它们没有用。我得到了:
ArgumentError:
unknown keyword: location_id
似乎RSpec现在需要params
参数。相应的调用将如下所示:
get(:index, params: { location_id: 123 })
答案 2 :(得分:2)
这是因为你没有通过let englishLabel = UILabel(CGRectZero)
label.text = englishString
label.sizeToFit()
label.center = CGPointMake(self.view.center.x, 150)
将路线定义为匹配:
location_id
所以为了遵守它,你需要做一些像
这样的事情
/packages/city/:location_id
与Controller规范有相同的问题:
get :index, location_id: 1234
当我做的时候:
# rake routes | grep media_order
teacher_work_media_orders PATCH /teacher/works/:work_id/media_orders(.:format) teacher/media_orders#update
我得到了
# spec/controller/teacher/media_orders_controller
patch :update data: {}
但是当我做的时候
Failure/Error: patch :update
ActionController::UrlGenerationError:
No route matches {:action=>"update", :controller=>"teacher/media_orders"}
有效
答案 3 :(得分:-1)
在我的控制器规格上解决了同样的错误。尝试了接受并跟进的解决方案,但它们也没有起作用,导致没有方法错误或持续存在没有路线匹配错误。
像接受的解决方案那样直接定义路由也不能满足错误。
经过大量搜索并通过了一些键盘粉碎测试。
resources :location, only[:index, :show] do ... end
let(:location) do
create(:location)
end
shared_examples("a user who can't manage locations") do
describe 'GET #index' do
it 'denies access' do
get :index, params:{location_id: location.locationable.id, format: :json}
expect(response).to have_http_status :unauthorized
end
end
end
最后,这是两种解决方案的组合,但是必须将它们放在params哈希中,否则会抛出名称/无方法或路由错误
希望这会有所帮助
干杯!