代码之家  ›  专栏  ›  技术社区  ›  Trenton Tyler

Rails Api测试UrlGenerationError

  •  0
  • Trenton Tyler  · 技术社区  · 6 年前

    class Api::V1::UsersController < ApplicationController
      respond_to :json
    
      def show
        respond_with User.find(params[:id])
      end
    end
    

    以下是该用户控制器的规范

    require 'rails_helper'
    
    RSpec.describe Api::V1::UsersController, type: :controller do
      before(:each) { request.headers['Accept'] = "application/vnd.marketplace.v1" }
    
      describe "GET #show" do
        before(:each) do
          @user = FactoryBot.create :user
          get :show, format: :json
        end
    
        it "returns the information about a reporter on a hash" do
          user_response = JSON.parse(response.body, symbolize_names: true)
          expect(user_response[:email]).to eql @user.email
        end
    
        it { should respond_with 200 }
      end
    end
    

    当我运行这个规范时,我得到以下错误消息:`Failure/error:get:show,format::json

     ActionController::UrlGenerationError:
       No route matches {:action=>"show", :controller=>"api/v1/users", :format=>:json}`
    

    我的API只有一条路径:

    api_user GET  /users/:id(.:format) api/v1/users#show {:subdomain=>"api", :format=>:json}
    

    有人知道我为什么会犯这个错误吗?在我看来,基于从api routes列表返回的路由,这应该是可行的。我的 routes.rb 文件如下:

    namespace :api, defaults: { format: :json }, constraints: { subdomain: 'api' }, path: '/'  do
        scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
          resources :users, :only => [:show]
        end
      end
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Mangesh Tamhankar    6 年前

    :id 参数,但是 get :show

    从Rspec,您可以发送带有以下内容的id:

    get :show, params: { id: @user.id }, format: :json