ruby-on-rails-3.1 - matchers - ruby on rails selenium
Controlador Rspec probando con Javascript (2)
¿Cómo se prueba un controlador en Rspec si el controlador solo responde con javascript? Por ejemplo, este sería mi código real:
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) %>'');
Prueba de Rspec
spec / controllers / chips_controller_spec
it "should add chips" do
post :add_chips, :format => ''js''
end
Cuando intento publicar en este documento utilizando RSpec, aparece un error de Plantilla faltante porque está enviando una solicitud HTML pero no hay una vista HTML. He intentado pasar en un formato pero eso no parece funcionar. Sé que puedo poner una vista html "ficticia" para hacerla pasar, pero eso parece un truco.
Gracias
Ok, me di cuenta de lo que estaba haciendo mal. Pasaba un hash de parámetros con mi prueba y el formato debe incluirse en el mismo hash. así que en lugar de esto:
@params = {:chip_color => ''red''}
...
post :add_chips, @params, :format => ''js''
Tiene que verse así
@params = {:chip_color => ''red'', :format => ''js''}
...
post :add_chips, @params
Si está intentando realizar una solicitud Ajax desde una especificación de controlador, en lugar de hacer post :add_chips
y pasar el format
como parámetro, debe hacer:
xhr :post, :add_chips, @params
... sin format
en params. Eso hará una solicitud de JavaScript y responderá con la plantilla .js
.
Actualizar:
En las versiones recientes de Rails / RSpec, debes hacer lo siguiente:
post :add_chips, params: @params, xhr: true