2009-09-28 9 views
6

Ho la seguente funzione nel controlloprova rotaie controller che risponde in diversi formati

def by_xy 
     @obj = BldPoly::find_by_xy(:x => params['x'], :y => params['y']) 

     respond_to do |format| 
      format.html { render :layout => false } 
      format.xml { render :layout => false } 
      format.json { render :layout => false } 
end 

e la pianificazione di scrivere il test automatico nel modo seguente

xml = nil 
get :by_xy, {:x => 4831, :y => 3242, :format => :json} 
assert_nothing_thrown { xml = REXML::Document.new(@response.body) } 

td = REXML::XPath.first(xml, "//result/item") 
assert_equal need_value, td.value 

e vengo Completato nel 50ms (Visualizza: 0, DB: 230) | 406 Non accettabile [http://test.host/search/by_xy/4831/3242.json]

quando ho perso formato nel codice di test - tutto funziona correttamente,

come devo scrivere il test?

risposta

8

L'ho capito, in realtà; questo è come dovrebbe essere

get :by_xy, {:x => i[:x], :y => i[:y]}, :format => :json 
+0

Non so se questo ha funzionato in un punto, ma non sembra più. –

+0

L'hash utilizzato per: x, e: y è il problema, rimuovere l'hash. Quindi, avrai qualcosa del tipo: 'get: action, param1: 'a', param2: 'b', formato:: json' – Josh

0

per Rails 5.1, quando si fa un post, ho dovuto includere l'attributo format interno della mia params hash

share_params = { 
    email: nil, 
    message: 'Default message.' 
    format: :json 
} 
post image_share_path(@image), params: share_params 
assert_response :unprocessable_entity 

Se non vorrei avere l'errore ActionController::UnknownFormat all'interno del mio controller di creazione

def create 
    @image = Image.new(image_params) 
    if @image.save 
    flash[:success] = 'Your image was saved successfully.' 
    redirect_to @image 
    else 
    respond_to do |format| 
     format.json do 
     render json: { @image.to_json }, 
     status: :unprocessable_entity 
     end 
    end 
end 
Problemi correlati