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.