1

我在 Rails 中创建一个 API,并使用versionist来处理版本。我想测试 API 控制器,但无法创建有效请求。

我的控制器:

 class Api::V1::ItemsController < Api::V1::BaseController    
  def index
    render json:'anything'
  end
end

我的规格:

describe Api::V1::ItemsController do
  describe "#create" do
    it "shows items" do
      get :index, format: :json
    end
  end
end

路线.rb:

scope '/api' do
  api_version(:module => "Api::V1", :path => {:value => "v1"}, :default => true) do
    resources :items
  end
end

测试不检查任何东西。尽管如此,它还是引发了一个错误:

 Failure/Error: get :index, format: :json
 ActionController::RoutingError:
   No route matches {:format=>:json, :controller=>"api/v1/items", :action=>"index"}

我想:controller请求中的密钥有问题,但我不知道如何修复它......

4

1 回答 1

2

我能够在本地重现这个。您需要将此移动到请求规范而不是控制器规范才能使其工作:

# spec/requests/api/v1/items_controller_spec.rb
describe Api::V1::ItemsController do
  describe "#index" do
    it "shows items" do
      get '/api/v1/items.json'
      # assert something
    end
  end
end

版本主义文档说在使用 HTTP 标头或请求参数版本控制策略时需要这样做(https://github.com/bploetz/versionist#a-note-about-testing-when-using-the-http-header- or-request-parameter-strategies),但这里显然不是这种情况。我将提出一个问题,以便在文档中澄清您需要为所有版本控制策略执行此操作。

于 2013-01-29T22:39:29.830 回答