Ruby on rails &引用;“没有路线匹配”;rspec中出错,但rake ROTES中显示路由
这是我从Ruby on rails &引用;“没有路线匹配”;rspec中出错,但rake ROTES中显示路由,ruby-on-rails,ruby,ruby-on-rails-3,rspec,routes,Ruby On Rails,Ruby,Ruby On Rails 3,Rspec,Routes,这是我从routes.rb的路线: resources :books, :except => [:new, :edit] do post "pull" => "books#update", :data => { "pull" => true } rake routes按预期显示内容 pull_api_v1_book POST /api/v1/books/:id/pull(.:format) api/v1/books#update {:format
routes.rb的路线:
resources :books, :except => [:new, :edit] do
post "pull" => "books#update", :data => { "pull" => true }
rake routes
按预期显示内容
pull_api_v1_book POST /api/v1/books/:id/pull(.:format)
api/v1/books#update {:format=>:json, :data=>{"pull"=>true}}
运行dev服务器时,路由按预期工作:
curl -X POST http://localhost:3000/api/v1/books/3/pull?auth_token=1234567890
书籍中的我的规范\u controller\u spec.rb:
describe "pull api" do
it "should not fail" do
post :pull, params: { :id => 12 }
end
end
但是规范的输出:
Failure/Error: post :pull, params: { :id => 12 }
ActionController::UrlGenerationError:
No route matches {:action=>"pull", :controller=>"api/v1/books", :id=>12}
为什么rspec找不到路由?rails中的控制器测试实际上并不调用路由,它只是调用控制器操作的语法糖。您的规范应调用:
post :update, params: { :id => 12 }
如果你真的想测试路由,你应该使用一个请求规范。你可以粘贴到规范中,作为参考,这会很有帮助。它就在那里(非常简单的单行规范)。我现在让它变得更明显了post:pull,参数:{:id=>12}