我有这条路线
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
注意:我被迫不重写任何代码,只能提出更改建议。
答案 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