我在Rails中有这个(当然是可怕的)路线:
scope '/software' do post '/:software_id/:attachment_id/event/*event' => 'software#post_event', as: 'post_event' end
(我会更改它,但对于遗留API)
我正在为它编写RSpec测试。
rake routes
给了我:
post_event POST /software/:software_id/:attachment_id/event/*event(.:format) api/version1301/software#post_event
我的测试看起来像这样:
describe "post_event" do it "should respond with 204" do params = { attachment_id: @attachment.uid, software_id: @license.id } post :post_event, params response.code.should eq "204" end end
但是我收到以下路由错误:
Failure/Error: post :post_event, params ActionController::RoutingError: No route matches {:format=>"json", :name_path=>:api, :attachment=>"7b40ab6a-d522-4a86-b0de-dfb8081e4465", :software_id=>"0000001", :attachment_id=>"7b40ab6a-d522-4a86-b0de-dfb8081e4465", :controller=>"api/version1301/software", :action=>"post_event"} # ./spec/controllers/api/version1301/software_controller_spec.rb:62:in `block (4 levels) in '
如何使用通配符(事件)处理路由?
答案 0 :(得分:13)
(回答我自己的问题)
这竟然是一个“新秀”的错误。
路由的通配符(事件)部分仍然需要一个参数。我没有传递'event'参数,因此路线不完整。
以下代码有效:
describe "post_event" do it "should respond with 204" do params = { attachment_id: @attachment.uid, software_id: @license.id, event: 'some/event' } post :post_event, params response.code.should eq "204" end end
/*event(.:format)
表示它需要一个参数。
对自己和他人的特别说明:
如果您在Rails中遇到路由错误,请确认您已传递所有参数。