找不到现有路线

时间:2018-09-12 08:31:49

标签: ruby-on-rails-4 rspec3

我有这条路线

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 Rails 4.1.6 RSpec 3.8.x

注意:我被迫不重写任何代码,只能提出更改建议。

1 个答案:

答案 0 :(得分:0)

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
相关问题