2009-01-07 7 views
6

¿Cuál es la mejor manera de garantizar que se genere el RJS adecuado en una acción del Controlador?¿La mejor manera de probar RJS en las especificaciones del controlador RSpec?

Por ejemplo, quiero asegurar que un div se destacó como tal:

def new 
    render :update do |page| 
    page.visual_effect :highlight, :some_div 
    end 
end 

Rant: Esto se está convirtiendo rápidamente en uno de los motivos por los que se cansan de RSpec después de usarlo durante un año . Esta debería ser una pregunta fácil, pero para la que nadie parece tener una respuesta.

Me han dicho repetidas veces que RSpec especifica el comportamiento y lo que estoy tratando de hacer aquí es solo "código de prueba". Resaltando el: some_div es el comportamiento por lo que puedo decir.

Respuesta

4

¿No es posible configurar una prueba de controlador para el resultado de la respuesta y buscar algún formato de javascript?

xhr :get, :new 
    response.should be_success 
    response.should have_text("... test for JS response ...") 

También me probable que el uso de selenio para probar más a fondo esta en el cliente, y la prueba de controlador es de más de un cheque "cordura".

+0

He intentado esto, pero sólo puede realmente probar los efectos visuales; no replace_html, etc. Puedo probar que algo está siendo reemplazado, pero no el nombre parcial, locales, etc. –

+0

Sí, no es ideal ... Tiendo a llevar la mayor parte de estas pruebas al Selenio y simplemente mantener las pruebas del Controlador en un nivel muy alto, probando el flujo general de la aplicación. –

4

rspec le ofrece el auxiliar have_rjs que envuelve assert_select_rjs. Aquí están algunos detalles:

http://jonathan.tron.name/2007/11/24/rspec-and-inline-rjs

assert_select_rjs Desgraciadamente, sólo cubre:

:replace, :replace_html, :show, :hide, :toggle, :remove and :insert_html 

Así que esto no va a manejar la visual_effect de su pregunta. Sin embargo, el complemento ARTS admite los efectos visuales.

http://github.com/timocratic/arts/tree/master

Usted debe ser capaz de combinar eso con rspecs nueva 'spec/interoperabilidad/prueba'.

http://blog.davidchelimsky.net/2009/2/2/rspec-works-with-test-unit

Cuestiones relacionadas