rspec中“没有路由匹配”错误,但路由显示在rake路由中

时间:2016-08-03 02:48:06

标签: 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=>:json, :data=>{"pull"=>true}}

运行dev服务器,路由按​​预期工作:

curl -X POST  http://localhost:3000/api/v1/books/3/pull?auth_token=1234567890

我在books_controller_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找不到路线?

1 个答案:

答案 0 :(得分:2)

rails中的控制器测试实际上不会调用路由,它只是用于调用控制器操作的语法糖。您的规范应该致电:

post :update, params: { :id => 12 }

如果您确实想测试路线,则应使用请求规范。