Rails Api тест UrlGenerationError - PullRequest
       2

Rails Api тест UrlGenerationError

0 голосов
/ 04 октября 2018

Я создаю API и при написании тестов я сталкиваюсь со странной ошибкой UrlGenerator.

У меня есть API на первой версии, и это мой контроллер Users.

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

Когда я запускаю этотspec Я получаю следующее сообщение об ошибке: `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.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 Ответ

0 голосов
/ 04 октября 2018

Проблема в том, что для заданного вами маршрута show требуется параметр :id, но вызов для get :show из теста не отправляет его.

Из Rspec вы можете отправить идентификаторс чем-то вроде:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...