2013-08-01 6 views
5

Niedawno przeniesiono do Rails 4 i otrzymałem błędy, których wcześniej nie otrzymywałem. Próbuję przetestować formularz, który robię przy użyciu Capybara/Rspec.Uzyskiwanie ActionController :: UnknownFormat, testowanie rspec podczas tworzenia nowego obiektu

Kiedy klikam przycisk na formularzu, błąd pojawia się:

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)>' 

Wskazuje to na moim kontroler, który wygląda tak:

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 

i nie lubi formatu .js line mimo że mam plik create.js.erb, który jest renderowany, gdy faktycznie uruchomię stronę.

Nie rozumiem, dlaczego strona faktycznie działa, ale mój test się nie udaje.

Wszelkie przemyślenia będą mile widziane!

+4

Twój test prawdopodobnie uruchamia akcję tworzenia w formacie html, podczas gdy kontroler działa tylko w formacie js. – rmagnum2002

Odpowiedz

14

Miałem podobny problem:

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

wyprodukował sam błąd:

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

Naprawiłem go poprzez dodanie formatu na wezwanie postu:

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

Tak, używając formatu:: js rozwiązał problem, w moim przypadku mój kod wygląda tak:

W moim specyfikacji:

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

    post :create, params 

w moim kontrolera:

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

Przed Rails 5:

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

Od Rails 5 onward:

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

Świetna odpowiedź, którą chciałbym zobaczyć godzinę temu. Szyny 5 FTW! – Marc