我有以下路线:
配置/ routes.rb中:
Rails.application.routes.draw do
scope module: :api do
namespace :v1 do
resources :users
end
end
end
控制器/ API / V1 / users_controller.rb:
module Api
module V1
class UsersController < ApplicationController
def index
...
end
end
end
end
控制器规格位于文件夹spec/controllers/api/v1/
。
规格/控制器/ API / V1 / users_controller_spec.rb:
module Api
module V1
RSpec.describe UsersController, type: :controller do
let!(:users) { create_list(:user, 10) }
describe 'GET /v1/users' do
before { get :index }
# Already tried `get '/v1/users'`, got the same error
it 'should return 10 users' do
expect(JSON.parse(response).size).to eq(10)
end
end
end
end
end
运行测试后,我收到以下错误:
的ActionController :: UrlGenerationError: 没有路线匹配{:action =&gt;&#34; index&#34;,:controller =&gt;&#34; api / v1 / users&#34;}
注意它&#34;推断&#34;来自某个地方的api
部分,但我的路线是这样的:
v1/users
v1/users/:id
...
我怎样才能让它发挥作用?
答案 0 :(得分:1)
我认为这是因为您使用Api::V1::UsersController
命名测试,但您的路线是在Api的范围中定义的。这就是您的路线不在/api
尝试从控制器中移除Api模块并测试或将scope module: :api
更改为namespace :api
或者,您可以按原样保留所有内容并向get
发出v1_users_path
请求,或者在您rails routes
时运行相应路径(而不是:index
})。