2013-08-01 4 views
5

Recentemente spostato su Rails 4 e ottenendo errori che non stavo ottenendo prima. Sto provando a testare un modulo che sto usando usando Capybara/Rspec.Ottenere un controllo ActionController :: UnknownFormat, rspec durante la creazione di un nuovo oggetto

quando clicco sul pulsante sul form, l'errore che ottengo è:

Failure/Error: find(".submit.button").click 
    ActionController::UnknownFormat: 
     ActionController::UnknownFormat 
    # ./app/controllers/office_listings_controller.rb:32:in `create' 
    # ./spec/features/office_listings_spec.rb:78:in `block (3 levels) in <top (required)>' 

Esso rimanda al mio controller che assomiglia a:

def create 
    selected_amenities = params[:amenities] || [] # empty list if no amenities checked 
    @office_listing = OfficeListing.new(params[:office_listing]) 
    @office_listing.broker = current_broker 
    p current_broker 
    @office_listing.neighborhood = Neighborhood.find(params[:neighborhood_id]) 
    p @office_listing.neighborhood 
    if @office_listing && @office_listing.save! 
     @path = city_neighborhood_office_listing_path(@office_listing, :city_id => @office_listing.neighborhood.city.id, :neighborhood_id => @office_listing.neighborhood.id) 
     create_amenities(@office_listing, selected_amenities) 
     respond_to do |format| 
     format.js 
     end 
    else 
     @failure = "Unable to create office :-(" 
     respond_to do |format| 
     format.js 
     end 
    end 
    end 

e non gli piace il formato .js linea anche se ho un file create.js.erb che viene sottoposto a rendering quando eseguo effettivamente la pagina.

Non capisco perché la pagina corrente sia in esecuzione ma il mio test non funziona.

Qualsiasi pensiero sarebbe molto apprezzato !!

+4

il test esegue probabilmente l'azione di creazione in formato html mentre il controller funziona solo nel formato js. – rmagnum2002

risposta

14

Ho avuto un problema simile:

post :duplicate, id: patient.media.first.id 

prodotto lo stesso errore:

Failure/Error: post :duplicate, id: patient.media.first.id 
ActionController::UnknownFormat: 
ActionController::UnknownFormat 

ho riparato aggiungendo il formato alla chiamata postale:

post :duplicate, id: patient.media.first.id, format: :js 
2

sì, utilizzando il formato:: js ha risolto il problema, nel mio caso il mio codice assomiglia a questo:

Nella mia spec:

params = { 
    profile_id: profile.id, 
    track_id: track.id, 
    format: :js 
    } 

    post :create, params 

Nel mio controller:

respond_to do |format| 
    format.js {} 
    end 
1

Prima Rails 5:

post :action, id: ..., format: :json 

Da Rails 5 in poi:

post :action, params: { id: ..., format: :json } 
+0

Ottima risposta che vorrei aver visto un'ora fa. Rails 5 FTW! – Marc