Не удается найти существующий маршрут - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть этот маршрут

get 'versions' => 'main#versions', formats: [:xml]

В моем MainController у меня есть действие versions, таким образом:

class MainController < ApplicationController
  ...

  def versions
    render formats: [:xml]
  end
end

и под app/views/main у меня versions.xml.erb.

Я написал тест контроллера RSpec:

требуется 'rails_helper'

RSpec.describe MainController, type: :controller do
  ...

  describe '#versions' do
    it 'renders versions template' do
      get :versions, formats: [:xml]

      expect(response).to render_template(:versions)
    end
  end
end

Однако я продолжаю получать эту ошибку:

Failure/Error: get :versions, formats: [:xml]

     ActionController::UrlGenerationError:
       No route matches {:action=>"versions", :controller=>"main", :formats=>["xml"]}

Однако, когда я запускаю rake routes, я получаю:

versions GET  /versions(.:format)   main#versions {:formats=>[:xml]}

Я все еще не понимаю, почему я получаю эту ошибку, когда существует маршрут с правильными параметрами.

Ruby 2.1.5 Рельсы 4.1.6 RSpec 3.8.x

ПРИМЕЧАНИЕ. Я вынужден не переписывать код и предлагать только изменения.

1 Ответ

0 голосов
/ 12 сентября 2018

В маршрутизации Rails используется ключ format, а не formats. По умолчанию он автоматически поддерживается для всех конечных точек и будет передавать любой формат, необходимый для действий вашего контроллера.

Я бы предложил следующие модификации:

# routes.rb
get 'versions', to: 'main#versions'

# main_controller.rb
def versions
  respond_to do |format|
    format.xml
  end
end

# main_controller_spec.rb
it 'renders the version template' do
   get :versions, format: :xml
   ...
end
...