我有一个应用程序(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)>'
请求是否应该以不同的方式进行测试,因为路由是嵌套的?我尝试了很多东西,但似乎没有任何工作。任何指针都将非常感激。
答案 0 :(得分:1)
因为它是嵌套的,所以您需要获得特定商品的优惠。
所以你需要做
get :index, :item_id => Item.first.id
(或代替Item.first,您要测试的某些特定项目记录)