2011-04-05 25 views
8

Estoy tratando de usar Jasmine para pruebas unitarias de una pequeña aplicación escrita en coffeescript. He encontrado muchas fuentes que dicen que las pruebas unitarias se pueden hacer perfectamente en JS compilado de coffeescript. ¿Cómo se accede a los datos y la lógica del código JS, si todo está envuelto en una función anónima para evitar contaminar el espacio de nombres? ¿Es la única solución para ejecutar el compilador con el indicador -b cada vez?Coffeescript + Prueba unitaria: variables globales?

Respuesta

9

Debe probar contra la interfaz pública que expone de su módulo CoffeeScript. Si el módulo se llama Foo y expone dos métodos públicos, bar y baz, es posible exportarlos de la siguiente manera:

Foo = 
    bar: (a, b) -> 
     #implementation 
    baz: (c) -> 
     #implementation 
(exports ? this).Foo = Foo 

Hay otras variaciones en este patrón, por supuesto. Ver underscore.coffee, por ejemplo. Ahora que tiene su interfaz pública expuesta, solo haga que esté disponible para sus pruebas de Jasmine de la forma que sea apropiada. Si está utilizando el jazmín-nodo, por ejemplo, tendría que hacer lo siguiente:

Foo = require('foo') #assuming your module is compiled to foo.js 

Sus pruebas llamaría entonces Foo.bar y Foo.baz.

3

Hay muy pocos casos donde tiene sentido usar -b; las pruebas ordinarias no son una de ellas. lawnsea está completamente de acuerdo en que debe exportar todo lo que pruebe (adjuntándolo a exports bajo Node, o window en un navegador). Es lo mismo que cualquier lenguaje de programación, realmente.

Para Jasmine y CoffeeScript, especialmente en conjunción con jQuery, debería echar un vistazo al proyecto InstantJasmineCoffee y this related blog post.

+0

el enlace de la publicación del blog es 404 ahora ... – number5

3

Acabo de tropezar con esto, pero si estás buscando comenzar con Jasmine + CoffeeScript a bajo precio, puedes echar un vistazo a esta aplicación esquemática de Sinatra que he publicado en Github. Utiliza un filtro de rack para compilar CoffeeScript dinámicamente. Ejemplos de especificaciones & instrucciones incluidas: https://github.com/searls/jasmine-coffee