2011-03-28 13 views
5

yo estaba tratando de realizar un encuentro en mi TestCase como esto:Cómo establecer el tipo de contenido en una solicitud ActionController :: TestCase

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

Sin embargo, se produce un error con un:

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

A pesar de que en mi controlador tengo:

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 

¿Cómo diablos debería codificar la solicitud prevista en el TestCase?

Cuando solicito alarm_events.json en el navegador, funciona bien.

Gracias

Respuesta

8

tuviera que especificar el formato en los parametros para las pruebas de controlador de acción:

get :index, {format: :json} 
+0

Esta es la solución correcta si proporciona un formato predeterminado en su tabla de enrutamiento (por ejemplo, 'defaults: {format:: json}'). Sus solicitudes 'TestCase' no pasan por la tabla de enrutamiento para que no tengan adjunto el formato predeterminado. – piersadrian

2

que sugeriría para establecer la cabecera dentro de la 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 
+0

Nop. Todavía no funciona. Pregunta actualizada –

6
@request.accept = 'application/json' 
Cuestiones relacionadas