2011-04-29 8 views
7

Tengo una aplicación de rieles que combina activos de javascript utilizando Jammit, y me gustaría usar Jasmine para probar BDD de mi javascript. Me pregunto si alguien tiene algún consejo para acceder a los 'pacakges' generados por Jammit desde dentro de Jasmine.¿Cómo puedo usar efectivamente Jasmine para probar los activos de javascript empaquetados a través de Jammit?

El problema es que Jasmine se configura al definir una lista de archivos JS en el disco para probar, y luego incluye esos archivos dentro de su propia página de prueba del corredor que se carga y ejecuta en un navegador.

Podría hacer referencia a cada uno de los archivos JS individuales dentro del archivo de configuración jasmine.yml antes de que estén empaquetados con Jammit ... sin embargo, Jammit ya está lidiando con dependencias entre archivos para mí y, más importante aún, también necesita acceder al compilado javascript templates que produce Jammit.

También podría ejecutar manualmente Jammit para generar primero los activos compilados y luego ejecutar Jasmine, pero terminaría teniendo que volver a generar los activos a mano antes de cada prueba para probar los cambios, lo que seria un calambre un flujo de trabajo de tipo prueba rápida.

Me pregunto si pudiera de alguna manera:

  • Monte el controlador Jammit desde dentro servidor en rack de Jasmine por lo que podría servir a los paquetes de Jasmine? Esto básicamente funcionaría de la misma manera que Jammit ya lo hace desde el entorno de desarrollo de Rails.
  • Enganche en Jasmine de alguna manera para empaquetar los activos en cada carga de página antes de ejecutar las pruebas? Esto sería más lento, pero me ahorraría un paso y garantizaría que las cosas estuvieran actualizadas.

¿Alguna sugerencia? Estoy empezando con esto, así que podría estar haciendo todo mal. Cualquier consejo sería muy apreciado. :-)

Gracias! -John

+0

habido suerte en esto? Estoy teniendo el mismo problema: estoy bien incluyendo los archivos js, pero es la creación de objetos JST lo que me está matando. – rmw

Respuesta

10

Aquí está la combinación mágica que estás buscando:

  1. Utilice la guard gem junto con el guard-jammit gem para observar los cambios en los activos de su proyecto
  2. instalar el LiveReload plugin en el navegador de su elección e instale el guard-livereload gem para que pueda volver a cargar su navegador automáticamente cuando cambien sus especificaciones o activos.
  3. Encienda la protección, luego rastrille el jazmín, luego cargue las especificaciones de jazmín en su navegador, luego presione el botón de carga en vivo para conectarse al servidor de carga en vivo que guardó inició
  4. Cambie sus archivos. Observe cómo sucede la magia mientras el guardia ejecuta jammit y le indica a su navegador que actualice las especificaciones de jazmín.

He aquí un ejemplo Guardfile para empezar:

guard 'jammit' do 
    watch(%r{public/javascripts/(.*)\.js}) 
    watch(%r{app/views/jst/(.*)\.jst}) 
    watch(%r{public/stylesheets/(.*)\.css}) 
end 

guard 'livereload', :apply_js_live => false do 
    watch(%r{app/.+\.(erb|haml)}) 
    watch(%r{app/helpers/.+\.rb}) 
    watch(%r{public/.+\.(css|js|html)}) 
    watch(%r{config/locales/.+\.yml}) 
    watch(%r{spec/javascripts/.+\.js}) 
end 
+0

Esto merece un triple voto positivo. – Levi

3

He encontrado una solución correcta: fuerce Jammit para volver a cargar y empaquetar cuando se inicia jazmín. Para ello, es necesario modificar el archivo jasmine_config.rb:

require 'jammit' 
module Jasmine 
    class Config 

    Jammit.reload! 
    Jammit.package! 

    end 
end 

escribí después un poco más detallada acerca de ello aquí: http://www.rebeccamiller-webster.com/2011/05/jammit-jasmine-bdd/

+0

¡Eres mi héroe! –

Cuestiones relacionadas