node.js tdd express jasmine jasmine-node

node.js - Automatice Jasmine-Node y express.js



tdd (4)

Esto es lo que hago:

Tengo un archivo server.js dentro de la raíz de mi proyecto de nodo que configura el servidor de aplicación de nodo (con express) y exporta 2 métodos:

exports.start = function( config, readyCallback ) { if(!this.server) { this.server = app.listen( config.port, function() { console.log(''Server running on port %d in %s mode'', config.port, app.settings.env); // callback to call when the server is ready if(readyCallback) { readyCallback(); } }); } }; exports.close = function() { this.server.close(); };

El archivo app.js será simple en este punto:

var server = require(''./server''); server.start( { port: 8000 } );

Entonces, la estructura básica de los archivos / carpetas sería la siguiente:

src app.js server.js

Tener esta separación le permitirá ejecutar el servidor normalmente :

node src/app.js

.. y / o requerirlo desde un script de nodo personalizado , que podría ser un script de nodo (o una tarea jake / gruñido / lo que sea) que ejecuta tus pruebas de esta manera:

/** my-test-task.js */ // util that spawns a child process var spawn = require(''child_process'').spawn; // reference to our node application server var server = require(''./path/to/server.js''); // starts the server server.start( { port: 8000 }, function() { // on server ready launch the jasmine-node process with your test file var jasmineNode = spawn(''jasmine-node'', [ ''.path/to/test/file.js'' ]); // logs process stdout/stderr to the console function logToConsole(data) { console.log(String(data)); } jasmineNode.stdout.on(''data'', logToConsole); jasmineNode.stderr.on(''data'', logToConsole); jasmineNode.on(''exit'', function(exitCode) { // when jasmine-node is done, shuts down the application server server.close(); } });

Creé una Webapp simple usando express.js y quiero probarla con jasmine-node . Funciona bien hasta el momento, pero mi problema es que tengo que iniciar el servidor manualmente cada vez antes de poder ejecutar mis pruebas.

¿Podrías ayudarme a escribir un asistente de especificación que ejecute el servidor (con otro puerto y luego mi desarrollo) solo para las pruebas y luego lo mata después?


Si lo desea, puede ir un paso más allá en la automatización de sus pruebas mientras se desarrolla, puede ir a su línea de terminal y ejecutar

jasmine-node . --autotest

Jasmine se quedará escuchando cada archivo dentro de su proyecto y cada vez que realice cambios en uno le dirá si esa parte de su código rompe cualquiera de sus pruebas;)


Suponiendo que utiliza algún código que invoca app.listen() en server.js, no requiere el archivo en cada ejecución, pero solo una vez y luego tiene dos funciones como

startServer = -> app.listen(3000) stopServer = -> app.close()

Entonces puede usar estos en beforeEach y afterEach


Yo uso Mocha, que es muy similar, pero debería aplicarse el mismo principio: podrías intentar solicitar tu archivo app.js en un enlace ''beforeEach'' dentro de la describe principal. Eso debería encenderlo para ti.