Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails &引用;“没有路线匹配”;rspec中出错,但rake ROTES中显示路由_Ruby On Rails_Ruby_Ruby On Rails 3_Rspec_Routes - Fatal编程技术网

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}