rails matchers generate bot ruby-on-rails-3.1 rspec2 rspec-rails

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