2009-09-28 11 views
6

Ich habe die folgende Funktion in der SteuerungTest-Schienen-Controller, der in verschiedenen Formaten reagieren

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 

und Planung der automatischen Prüfung auf folgende Weise

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 

und ich in 50ms abschloß zu schreiben (Ansicht: 0, DB: 230) | 406 Not Acceptable [http://test.host/search/by_xy/4831/3242.json]

wenn ich Format in Testcode verpasst - das alles funktioniert, richtig

wie soll ich schreiben den Test?

Antwort

8

Ich habe das tatsächlich herausgefunden; Dies ist, wie sollte es

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

Nicht sicher, ob dies an einem Punkt funktionierte, aber es scheint nicht mehr zu sein. –

+0

Der Hash für: x, und: y ist das Problem, entfernen Sie den Hash. Also haben Sie etwas wie: 'Get: Aktion, param1: 'a', param2: 'b', Format:: json' – Josh

0

Für Schienen 5.1, wenn ein Beitrag zu tun, hatte ich in meinem params-Hash

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

das format Attribut enthalten Wenn ich nicht den Fehler würde ActionController::UnknownFormat innen von meinem create Controller

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 
Verwandte Themen