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

时间:2016-12-05 16:35:27

标签: ruby-on-rails ruby rspec rspec-rails

我在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}

我做错了什么?

2 个答案:

答案 0 :(得分:1)

将路线改为

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

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

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

答案 1 :(得分:0)

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