RSpec没有路由与嵌套路由匹配

时间:2014-08-05 00:09:05

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

我有一个应用程序(API),我不想测试每个控制器执行成功的请求。我有以下路线:

   resources :items do
    resources :offers, only: [:index, :create, :destroy, :update] do
      put :accept, on: :member
    end
  end

在items_controller_spec.rb中,以下工作正常:

require 'spec_helper'

describe ItemsController do
  user = FactoryGirl.create(:user)
  item = user.items.create()


  context "GET #index" do

    it 'returns unauthorised - 401 when not logged in' do
      get :index
      # test for the 401 unauthorised
      expect(response.status).to eq(401)
    end

    it 'returns 200 and users items when logged in' do
      get :index , { access_token: user.token }

      expect(response.status).to eq(200)
    end

  end
end

在offers_controller_spec.rb中,相同的代码不起作用并产生以下错误:

  1) OffersController GET #index shows something
     Failure/Error: get :index
     ActionController::UrlGenerationError:
       No route matches {:action=>"index", :controller=>"offers"}
     # ./spec/controllers/offers_controller_spec.rb:8:in `block (3 levels) in <top (required)>'

请求是否应该以不同的方式进行测试,因为路由是嵌套的?我尝试了很多东西,但似乎没有任何工作。任何指针都将非常感激。

1 个答案:

答案 0 :(得分:1)

因为它是嵌套的,所以您需要获得特定商品的优惠。

所以你需要做

get :index, :item_id => Item.first.id

(或代替Item.first,您要测试的某些特定项目记录)