如何在ActionController :: TestCase请求中设置内容类型

时间:2011-03-28 16:50:23

标签: ruby-on-rails ruby json ruby-on-rails-3 rest

我试图像这样在我的TestCase中执行get:

request.env['CONTENT_TYPE'] = 'application/json'
get :index,:application_name=>"Heka"

尽管如此,它失败了:

ActionView::MissingTemplate: Missing template alarm_events/index with {:handlers=>[:builder, :haml, :erb, :rjs, :rhtml, :rxml], :locale=>[:en, :en], :formats=>[:html]

尽管在我的控制器中我有:

respond_to :html, :json

def index
    @alarm_events=[...]

    respond_with @alarm_events do |format|
      format.json{
        render :json=>@alarm_events.map{|e| e.to_portal_representation}.to_json, 
               :content_type=>'application/json'
      }
    end
  end

我该如何编写TestCase上的预期请求?

当我在浏览器中请求alarm_events.json时,它可以正常工作。

由于

3 个答案:

答案 0 :(得分:8)

我必须在动作控制器测试的参数中指定格式:

get :index, {format: :json}

答案 1 :(得分:6)

@request.accept = 'application/json'

答案 2 :(得分:2)

我建议在format.json

中设置标题
def index
    @alarm_events=[...]

    respond_with @alarm_events do |format|
      format.json{
        render :json => @alarm_events.map{|e| e.to_portal_representation}.to_json, :content_type => 'application/json'
      }
    end