2012-09-26 22 views
17

¿Cómo se prueba un controlador en Rspec si el controlador solo responde con javascript? Por ejemplo, este sería mi código real:Prueba del controlador Rspec con Javascript

algunos view.html.erb

link_to 'More Chips', add_chips_path, :remote => true 

chips_controller

def add_chips 
    Chips.create(:color => :red) 
    @chips = Chips.all 
end 

add_chips.js.erb

$('#chip_count').html('<%=j render("chips/list", :chips => @chips) %>'); 

Rspec prueba

spe c/controladores/chips_controller_spec

it "should add chips" do 
    post :add_chips, :format => 'js' 
end 

Cuando trato de escribir en este usando RSpec consigo un error de plantilla que falta, ya que es el envío de una solicitud de HTML, pero no hay una vista HTML. Intenté pasar un formato pero parece que no funciona. Sé que puedo poner una vista html "ficticia" para que pase, pero parece un truco.

Gracias

Respuesta

15

Ok, me di cuenta de lo que estaba haciendo mal. Estaba pasando un hash de parámetros con mi prueba y el formato debe incluirse en el mismo hash. así que en vez de esto:

@params = {:chip_color => 'red'} 
... 
post :add_chips, @params, :format => 'js' 

Tiene que tener este aspecto

@params = {:chip_color => 'red', :format => 'js'} 
... 
post :add_chips, @params 
43

Si usted está tratando de realizar una petición Ajax de una especificación de controlador, en lugar de hacer post :add_chips y pasando la format como parámetro, que debe hacer:

xhr :post, :add_chips, @params 

... sin format en params. Eso hará una solicitud de JavaScript y responderá con la plantilla .js.

Actualización:

En versiones recientes de rieles/RSpec, en su lugar debe hacer:

post :add_chips, params: @params, xhr: true 
+1

funcionaba como encanto! – Surya

Cuestiones relacionadas