Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test rails controller that respond in different formats

I have the following function in controller

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

and planning to write the automatic test in the following way

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

and I get Completed in 50ms (View: 0, DB: 230) | 406 Not Acceptable [http://test.host/search/by_xy/4831/3242.json]

when I missed format in testing code - all works correctly,

how should I write the test?

like image 599
se_pavel Avatar asked Sep 28 '09 16:09

se_pavel


2 Answers

I figured this out, actually; this is how it should be

get :by_xy, {:x => i[:x], :y => i[:y]}, :format => :json
like image 181
se_pavel Avatar answered Oct 05 '22 11:10

se_pavel


For rails 5.1, when doing a post, I had to include the format attribute inside of my params hash

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

If not I would get the error ActionController::UnknownFormat inside of my 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
like image 40
RamRovi Avatar answered Oct 05 '22 10:10

RamRovi