How to Set the Content Type in a ActionController::TestCase request

10,574

Solution 1

I had to specify the format in the params for action controller testing:

get :index, {format: :json}

Solution 2

@request.accept = 'application/json'

Solution 3

I would suggest to set the header inside the 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
Share:
10,574
Pedro Rolo
Author by

Pedro Rolo

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam a rhoncus nisl. Cras quis dui sem. Phasellus bibendum vestibulum eleifend. In hac habitasse platea dictumst. Quisque pretium, leo id aliquam dignissim, ligula massa feugiat ante, id ultricies metus quam ac augue. Quisque accumsan leo nec justo sodales faucibus. Etiam vitae augue est. Phasellus feugiat nec justo sit amet tristique. Morbi fermentum luctus elit, eget tempor eros laoreet a. Proin vitae tristique mauris, eu vehicula arcu. Donec dapibus nisi eget massa rhoncus finibus. In nunc felis, imperdiet ac diam eu, gravida fringilla eros. Sed tincidunt nisi nunc, vel facilisis ipsum luctus nec. Curabitur dapibus egestas leo, at porttitor urna elementum id. Vivamus sit amet sem diam. Ut dignissim, velit id fringilla pretium, quam augue dignissim nibh, eget congue odio metus id diam. Suspendisse tincidunt ut ligula sit amet congue. Proin iaculis vehicula ligula quis mollis. Nulla a vulputate turpis. Phasellus volutpat metus lobortis tortor consectetur, vitae faucibus ligula euismod. Aliquam leo sapien, vulputate sed quam quis, ultrices feugiat tellus. Mauris dapibus sollicitudin odio ut placerat. Vestibulum vitae tellus eget est aliquet luctus a id quam. In lacinia tortor quis vestibulum consequat. Suspendisse id urna vitae ante placerat maximus vel sit amet ipsum. Duis rhoncus nec lorem ut iaculis. In cursus consectetur purus eget volutpat. Aenean tincidunt est eget lectus fermentum fringilla. Nulla eu justo ac est malesuada molestie. In id diam ultricies, feugiat erat ac, accumsan ligula. Suspendisse quam nunc, accumsan ac massa id, auctor lobortis enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin eget auctor elit, vitae lacinia ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris efficitur at justo quis venenatis. Nulla leo nunc, ultrices nec nulla at, venenatis efficitur ligula. Nam at lacus sed leo dignissim egestas in sit amet erat. Curabitur imperdiet diam sit amet faucibus pharetra. Nullam pretium posuere velit, eu pretium eros sodales vel. Etiam ut risus interdum, faucibus turpis ac, varius neque. Aenean malesuada egestas semper. Pellentesque id aliquam magna, sit amet vehicula ex. Fusce pretium nibh lacus, eleifend sodales leo lacinia vitae. Aliquam at ornare sapien, at ullamcorper velit. Nam nec urna pellentesque, accumsan tortor id, blandit odio. Nulla facilisi. Ut ut eros eu mi cursus pretium. Morbi posuere augue ac diam ultricies, vel vehicula massa maximus. Vestibulum commodo sollicitudin massa, in accumsan dolor suscipit in. Duis tincidunt magna nunc, in consectetur felis auctor vitae. Curabitur augue est, accumsan non sodales vel, faucibus et tellus. Donec id mattis dolor, in maximus metus. Maecenas a nunc in nulla condimentum vehicula a sit amet ante volutpat.

Updated on June 09, 2022

Comments

  • Pedro Rolo
    Pedro Rolo almost 2 years

    I was trying to perform a get in my TestCase like this:

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

    Though, it fails with a:

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

    Despite that in my controller I have:

    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
    

    How the hell should I code the intended request on the TestCase?

    When I request alarm_events.json in the browser it works fine.

    Thanks