Problema ejecutando la tarea karma desde gulp


Estoy tratando de ejecutar las pruebas de karma de la tarea gulp y estoy recibiendo este error:

Error: 1
   at formatError (C:\Users\Tim\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:161:10)
   at Gulp.<anonymous> (C:\Users\Tim\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:187:15)
   at Gulp.emit (events.js:95:17)
   at Gulp.Orchestrator._emitTaskDone (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\index.js:264:8)
   at C:\path\to\project\node_modules\gulp\node_modules\orchestrator\index.js:275:23
   at finish (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:21:8)
   at cb (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:29:3)
   at removeAllListeners (C:\path\to\project\node_modules\karma\lib\server.js:216:7)
   at Server.<anonymous> (C:\path\to\project\node_modules\karma\lib\server.js:227:9)
   at Server.g (events.js:180:16)

Mi sistema es Windows 7, la versión nodejs es v0.10.32, la versión gulp:

[10:26:52] CLI version 3.8.8
[10:26:52] Local version 3.8.9

También, el mismo error que estoy recibiendo en Ubuntu 12.04 LTS mientras que en Ubuntu más reciente (no estoy seguro de qué versión) y mac os parece estar funcionando bien. ¿Qué puede causar este error?

Actualización 5/11/2016: Antes de escribir un comentario sobre el hecho de que la respuesta aceptada ocultar errores, por favor, ver los dos primeros comentarios a ese particular respuesta aceptada. Úsalo solo si sabes lo que estás haciendo. Información relacionada: https://github.com/karma-runner/gulp-karma/pull/15

Author: Timur, 2014-10-28

10 answers

¿Cómo está ejecutando sus pruebas con Gulp? Me topé con este problema recientemente en OSX, ejecutando node v0.11.14 y gulp 3.8.10, cada vez que había pruebas fallidas.

Cambiando de lo recomendado:

gulp.task('test', function(done) {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, done);
});

A:

gulp.task('test', function(done) {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, function() {
        done();
    });
});

...me deshice de este error.

Parece deberse a cómo gulp maneja los mensajes de error cuando se indica un error en una devolución de llamada. Consulte Mejorar los mensajes de error al salir para obtener más información.

 129
Author: McDamon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-16 17:53:27

Ninguna de estas soluciones funcionó correctamente para mí usando gulp 3.9.1 y karma 1.1.1. Agregar una referencia a gulp-util npm install --save-dev gulp-util y actualizar la tarea a lo siguiente soluciona la salida de error muy bien, mientras mantienes el estado de salida correctamente.

var gutil = require('gulp-util');

gulp.task('test', function (done) {
  new Server({
    configFile: __dirname + '/karma.conf.js',
    singleRun: true
  }, function(err){
        if(err === 0){
            done();
        } else {
            done(new gutil.PluginError('karma', {
                message: 'Karma Tests failed'
            }));
        }
    }).start();
});
 9
Author: brocksamson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-19 18:35:42

A continuación se muestra un fragmento de código de patrones de gulp sobre el uso de Karma. Es un poco similar, pero también utiliza el método más nuevo de cómo iniciar el karma.

/**
 * Start the tests using karma.
 * @param  {boolean} singleRun - True means run once and end (CI), or keep running (dev)
 * @param  {Function} done - Callback to fire when karma is done
 * @return {undefined}
 */
function startTests(singleRun, done) {
    var child;
    var excludeFiles = [];
    var fork = require('child_process').fork;
    var KarmaServer = require('karma').Server;
    var serverSpecs = config.serverIntegrationSpecs;

    if (args.startServers) {
        log('Starting servers');
        var savedEnv = process.env;
        savedEnv.NODE_ENV = 'dev';
        savedEnv.PORT = 8888;
        child = fork(config.nodeServer);
    } else {
        if (serverSpecs && serverSpecs.length) {
            excludeFiles = serverSpecs;
        }
    }

    var server = new KarmaServer({
        configFile: __dirname + '/karma.conf.js',
        exclude: excludeFiles,
        singleRun: singleRun
    }, karmaCompleted);
    server.start();

    ////////////////

    function karmaCompleted(karmaResult) {
        log('Karma completed');
        if (child) {
            log('shutting down the child process');
            child.kill();
        }
        if (karmaResult === 1) {
            done('karma: tests failed with code ' + karmaResult);
        } else {
            done();
        }
    }
}
 5
Author: Igor Lino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-17 06:53:49

Lo que funcionó para mí y dio un mensaje de error con buen formato es proporcionar una instancia de Error a la devolución de llamada done.

gulp.task('test', function(done) {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, function(result) {
        if (result > 0) {
            return done(new Error(`Karma exited with status code ${result}`));
        }

        done();
    });
});
 4
Author: Blacksonic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-16 14:47:51

Si desea regresar con un código de error, y desea ver la salida de error de Karma, pero no la traza de pila de Gulp (probablemente no relacionada):

gulp.task('test', function() {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, function(karmaExitStatus) {
           if (karmaExitStatus) {
               process.exit(1);
           }
    });
});
 2
Author: user3479425,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-08 04:55:00

No estoy seguro de Ubuntu, pero estaba recibiendo un error similar en Windows, e instalar una versión de nuevo lo solucionó de inmediato de la siguiente manera:

npm install -g [email protected]
npm install [email protected]
 1
Author: onfilm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-30 03:11:57

Esta es la manera de gulp de decir que tus pruebas han fallado y que el karma salió con un código de retorno de 1. Por qué querría llamar a done usted mismo y no pasar el error como un mensaje me desconcierta.

 1
Author: Laurent Picquet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-16 07:54:48

La manera correcta de resolver esto de acuerdo con la documentación de Karma y https://github.com/pkozlowski-opensource , es confiar en el mecanismo de vigilancia del Karma en lugar del de Gulp:

gulp.task('tdd', function (done) {
  karma.start({
    configFile: __dirname + '/karma.conf.js'
  }, done);
});

Nótese la omisión de singleRun: true.

La solución alternativa de@McDamon funcionará para gulp.watch, pero no querrás tragar códigos de salida como ese cuando se ejecuta en un servidor CI.

Gulp también está reelaborando cómo manejan los códigos de salida en escenarios como este. Ver https://github.com/gulpjs/gulp/issues/71 y la otra docena de temas relacionados.

 0
Author: Seth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-30 13:49:51
gulp.task('test', function(done) {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: false 
    }, done);
});

Pasar el argumento singleRun: false evitará que el proceso devuelva un valor diferente de 0 (lo que significaría un error y saldría de gulp).

Ejecute con singleRun: true si solo inicia su prueba desde una línea de comandos, que no forma parte de un conjunto de integración continua.

 0
Author: deBrice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-07 21:40:18

En caso de que alguien más venga aquí, no utilice la solución aceptada. Ocultará las pruebas fallidas. Si necesitas una solución rápida para modificar tu tarea de prueba gulp, puedes usar la solución que se encuentra en este comentario en este hilo de github.

gulp.src(src)
    // pipeline...
    .on('error', function (error) {
        console.error('' + error);
    });
 0
Author: mordant23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-12 00:46:56