2010-12-10 14 views
7

Estoy escribiendo una aplicación del lado del servidor con node.js y me gustaría incluir pruebas unitarias. Una cosa con la que estoy luchando es una buena forma de probar la unidad EventEmitter y setInterval/setTimoutPrueba de unidad controlada por evento javascript

¿Qué opciones tengo para probar la unidad asincrónicamente en el lado del servidor javascript?

Soy consciente de que solo puedo conectar otro oyente al EventEmitter que es la función de prueba, pero ¿cómo puedo garantizar que la función de prueba se ejecute alguna vez? parte de la prueba unitaria es garantizar que se ejecute cada parte de la prueba de la unidad.

Podría usar setTimeout pero parece ser una solución hackosa.

Si ayuda aquí hay algún código de ejemplo que estoy tratando de probar.

... 
function init(param) { 
    ... 
    // run update entities periodically 
    setInterval(this._updateEntities.bind(this, param.containerFull), 
     1000/param.fps); 
    ... 
} 
... 
EntityUpdater.prototype = { 
    ... 
    "_updateEntities": function updateEntitiesfunc(fn) { 
     this._tickEmitter.emit(
      "tick", 
      new dataContainer.DataContainer(this.getEntityCount()) 
      .on(
       "full", fn.bind(this) 
      ) 
     ); 
    }, 
    ... 
} 
... 

(emiten dará lugar a un evento)

[Editar]

empecé a leer algunas de las pruebas EvevntEmitter en https://github.com/ry/node/tree/master/test/simple y me ayuda a ver cómo hacer esto.

+0

¿Has echado un vistazo a esta publicación de blog? http://debuggable.com/posts/unit-testing-with-node-js:4b647d40-34e4-435a-a880-3b04cbdd56cb – Tmdean

+0

Sí, leí el blog, es útil pero solo cubre algunos puntos. Solo me acabo de dar cuenta de que la prueba no saldrá hasta que termine el ciclo. Esto todavía deja un fácil para una vez setTimeout y eventos de una vez. – Raynos

+0

Ahora solo noté que el bloque de salida está con respecto a la prueba en lugar del servidor. Es una forma de ejecutar un bloque de código después de finalizar todas las acciones asincrónicas – Raynos

Respuesta

3

Personalmente, lo que más me ayudó fue leer las pruebas de node.js (solo leí la mitad de ellas).

Eso me dio una buena sensación de cómo probar el código asíncrono.

Gracias a @tmdean por señalar otro ejemplo de cómo probar el código asíncrono.

3

Yo recomendaría que echa un vistazo a Jasmine para sus pruebas. Está diseñado para ejecutar pruebas fuera de un entorno de navegador y almacena llamadas como setTimeout, proporcionándole un reloj falso con el que puede adelantar el tiempo en su tiempo libre para probar cualquier cosa relacionada con el tiempo.