使用RSpec测试奇异资源控制器

我在routes.rb定义了一个奇异的资源,看起来像这样

 Rails.application.routes.draw do resource :dog, only: [:create], to: "dog#create", controller: "dog" end 

之后我用这样的创建动作定义了一个控制器

 class DogController < ApplicationController def create render json: {}, status: :ok end end 

而现在我正试图用这样的RSpec来测试它

 require "rails_helper" describe DogController do it "works" do post :create, params: { foo: :bar } end end 

这是抛出此错误而不是传递:

 ActionController::UrlGenerationError: No route matches {:action=>"create", :controller=>"dog", :foo=>:bar} 

我究竟做错了什么?

改变你的路线

 resource :dog, only: [:create], :controller => "dog" 

即使它是一个独特的资源,最好使用多个控制器

http://edgeguides.rubyonrails.org/routing.html#singular-resources

您的创建操作不包含任何参数。 它只是呈现json并返回状态代码