¿Cuál es el mejor marco de prueba para usar con Node.js? [cerrado]

130

He visto la larga lista de marcos de prueba en https://github.com/ry/node/wiki/modules#testing . ¿Cuál es la experiencia con estos marcos?

Obviamente, la capacidad de ejecutar en el navegador sería una gran ventaja, pero estoy principalmente interesado en Node.js. Algo con una inclinación muy asincrónica sería genial.

doffm
fuente

Respuestas:

70

Actualizar:

Mocha es el mejor en mi opinión.


¿Cuál es la experiencia con estos marcos?

Jugué con expresso, que es un marco de prueba bastante bueno que también tiene cobertura de prueba. Ha sido creado por TJ Holowaychuk, quien también es el creador de Express.js (marco de desarrollo web JavaScript del lado del servidor increíblemente rápido (y pequeño) basado en Node.js y Connect). Hace poco vi que también tiene una biblioteca genial llamada should.js que se puede usar junto con Expresso para una experiencia de prueba aún mejor.

Obviamente, la capacidad de ejecutar en el navegador sería una gran ventaja

No creo que pueda ejecutarse en el navegador, pero tampoco entiendo por qué querrías ejecutarlo dentro del navegador.

pero estoy principalmente interesado en Node.js. Algo con una inclinación muy asincrónica sería genial.

Cita del expreso:

El argumento pasado a cada devolución de llamada es beforeExit, que generalmente se utiliza para afirmar que se han invocado devoluciones de llamada.

Puede usar beforeExit para probar funciones asincrónicas.


CONSEJO: Siga a TJ Holowaychuk en GitHub , porque crea un muy buen código de código abierto.

Alfredo
fuente
Gracias por la respuesta, probé expreso pero descubrí que el soporte asíncrono no era muy intuitivo. (Para mí de todos modos)
doffm
3
Actualmente estoy probando votos ( vowsjs.org ) que me fue más fácil de entender.
doffm el
Votos también parecía un buen marco de prueba. Me gusta la función de cobertura de prueba de expresso. Además, ¿me pregunto qué no entendiste?
Alfred
44
Dices que prefieres Mocha ahora, pero ¿por qué?
Jonathan Arkell el
Solo inténtalo. Mocha tiene todo :). Incluso soporte de navegador, cobertura de código. Lo que sea, mocha lo tiene!
Alfred
40

Utilizo VowsJS, que es fácil de usar async BDD framework (Behavior Driven Development) y hago el trabajo.

Por lo que veo últimamente, es lo que muchos optaron por probar sus módulos NPM, así que creo que hasta ahora es uno de los mejores para usar.

Algunos marcos de prueba populares que podrían usarse con NodeJS también son aquellos:

También puede ver una lista de marcos de prueba de JavaScript aquí

Pocas bibliotecas más que podrían ayudarlo a escribir un mejor código son las siguientes:

También hay Bamboo CI Server de Atlassian, que automatiza compilaciones y pruebas. Es un paquete para Apache / Tomcat (que sux porque usa Java y que lo hace muy pesado) tampoco es gratuito, pero tiene una licencia de inicio que cuesta $ 10, así que creo que es asequible. Es el más destacado de todos los servidores de CI que encontré hasta ahora y admite todas las pruebas unitarias que admiten xUnit, lo que significa que puede ejecutar compilaciones / pruebas para cualquier idioma con Bamboo.

Otra opción para CI con NodeJS es Travis, que muchas personas usan para sus proyectos de código abierto, como dice Un servicio de integración continua alojado para la comunidad de código abierto.

También hay una discusión grupal de Google con el tema Integración continua para proyectos de Nodo JS .

panosru
fuente
66
Una nota para las personas que piensan usar votos: no se ha actualizado desde 2012
Code Commander
Hicieron algunos cambios después . último lanzamiento: septiembre de 2015
Andre Figueiredo
tiene una mala puerta de enlace en el sitio oficial de Votos en 2020, ¿tal vez muerto?
Lincoln
wow, amigo, han pasado MUCHOS años desde entonces, todo lo que pude encontrar sobre VowJS ahora es esto: istavros.github.io/vowjs pero desafortunadamente, no puedo sugerir que lo uses en 2020. Está desactualizado, y lo recomendaría sugiero que compruebes Mocha ( mochajs.org ), Jasmin ( jasmine.github.io ) y Jest ( jestjs.io ) en su lugar.
panosru
14

En base a los comentarios anteriores del autor de la pregunta, probé votos y resolvió muchos problemas que tenía con mis pruebas asíncronas. Su capacidad para mezclar pruebas en serie y paralelas es increíble.

Asegúrese de leer detenidamente el documento de orientación, pero una vez que lo aprenda, es flexible, potente y produce resultados agradables y limpios.

ACTUALIZACIÓN: También sería animar a la gente a la salida debe por su asevera. Permite afirmaciones muy flexibles y legibles, y es compatible tanto con Expresso como con Votos, y probablemente también con la mayoría de los otros marcos de prueba.

(Estoy publicando esto como una respuesta separada en caso de que la gente no note los comentarios sobre la respuesta de Alfred).

ACTUALIZACIÓN 1/7/2015: Por lo que vale, desde entonces he cambiado de Votos a Mocha, y debería de Chai. Mocha tiene mucho mejor soporte ahora para las pruebas asincrónicas usando promesas, y Chai permite varias opciones de afirmación flexibles, incluida la expectapi, para aquellos a quienes no les gusta modificar el prototipo del objeto.

Chris Jaynes
fuente
1
shouldagrega una propiedad no enumerable nombrada shouldal Objectprototipo, lo que significa que todos los valores / objetos con los que está tratando se ven ligeramente diferentes en el momento de la prueba y en el momento de la producción. Si bien esto probablemente 'simplemente funciona' en la mayoría de los casos, en principio es una mala idea modificar los prototipos incorporados; hacerlo solo durante las pruebas se siente mal. Todo se ha hecho únicamente para que puedan tener una buena sintaxis.
fluye el
@flow desde v2 es fácil de usar shouldsin extender Object.prototype(simplemente llame require('should').noConflict()y use should.js como una alternativa
esperada
6

Comencé a usar Jasmine para mis pruebas de JavaScript específicamente porque es pequeño y se ejecuta tanto en el navegador como en el nodo. También tiene una API de informes y comparación realmente sólida, por lo que es fácil de integrar con otras herramientas en el futuro. Tener un marco burlón de construcción también es útil, ya que a menudo es una de las primeras cosas que agregaría cuando estaba usando qunit para TDD en el navegador.

Mark B
fuente
2

Si desea un verdadero marco de BDD, entonces tal vez considere Yadda . Se integra con mocha, jazmín, nodeunit, qunit, zombie y casperjs, para admitir archivos de características, por ejemplo

   Scenario: provides the version of all services
      given service x is running
      and service y is running
      when I request the service versions
      then service x should be version 0.0.1
      and service y should be version 0.0.2
usuario2434418
fuente
2

He estado usando nodeunit y su capacidad para trabajar con funciones asíncronas es bastante sencilla.

Hay un buen tutorial que debería estar listo para usar con nodeunit en su blog .

[ Nota: la API ha cambiado desde la publicación del blog, setUp(callback)y tearDown(callback)ambos toman una devolución de llamada como argumento, al que debe llamar cuando se completa su configuración / desmontaje. ]

Vanwaril
fuente
Mirando esto y después de intentar algunas pruebas de las funciones de mongoose.js en expresso, la preferencia de nodeunit de no ejecutar todas las pruebas en paralelo y permitir las pruebas setUp y tearDown parece útil.
asparagino