Выпуск запуск карма задача из глотка
Я пытаюсь запустить тесты кармы из задачи gulp, и я получаю эту ошибку:
Error: 1
at formatError (C:UsersTimAppDataRoamingnpmnode_modulesgulpbingulp.js:161:10)
at Gulp.<anonymous> (C:UsersTimAppDataRoamingnpmnode_modulesgulpbingulp.js:187:15)
at Gulp.emit (events.js:95:17)
at Gulp.Orchestrator._emitTaskDone (C:pathtoprojectnode_modulesgulpnode_modulesorchestratorindex.js:264:8)
at C:pathtoprojectnode_modulesgulpnode_modulesorchestratorindex.js:275:23
at finish (C:pathtoprojectnode_modulesgulpnode_modulesorchestratorlibrunTask.js:21:8)
at cb (C:pathtoprojectnode_modulesgulpnode_modulesorchestratorlibrunTask.js:29:3)
at removeAllListeners (C:pathtoprojectnode_moduleskarmalibserver.js:216:7)
at Server.<anonymous> (C:pathtoprojectnode_moduleskarmalibserver.js:227:9)
at Server.g (events.js:180:16)
моя система Windows 7
, nodejs версия v0.10.32
- хрум версия:
[10:26:52] CLI version 3.8.8
[10:26:52] Local version 3.8.9
кроме того, та же ошибка я получаю на Ubuntu 12.04 LTS
в то время как на более новой Ubuntu (не уверен, какая версия) и mac os это, кажется, работает нормально. Что может вызвать эту ошибку?
обновление 5/11/2016: прежде чем писать комментарий о том, что принятый ответ скрывает ошибки, пожалуйста, см. первые два комментария к этому конкретному принятому ответу. Используйте его, только если знаете, что вы делаете. Связанная информация: https://github.com/karma-runner/gulp-karma/pull/15
10 ответов:
как вы проводите свои тесты с Gulp? Недавно я столкнулся с этой проблемой на OSX, запустив node
v0.11.14
и залпом3.8.10
, когда не было тестов.изменение рекомендуемых:
gulp.task('test', function(done) { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: true }, done); });
To:
gulp.task('test', function(done) { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: true }, function() { done(); }); });
...избавился от этой ошибки.
кажется, до того, как gulp обрабатывает сообщения об ошибках, когда ошибка сигнализируется в обратном вызове. Смотрите улучшить сообщения об ошибках на выходе дополнительные информация.
ни одно из этих решений не работало правильно для меня, используя gulp 3.9.1 и karma 1.1.1. Добавление ссылки на gulp-util
npm install --save-dev gulp-util
и обновление задачи до приведенного ниже исправить вывод ошибок очень красиво, сохраняя при этом статус выхода правильно.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(); });
Ниже приведен фрагмент кода из шаблонов gulp по использованию 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(); } } }
то, что работало для меня и дало хорошее отформатированное сообщение об ошибке, - это предоставить экземпляр ошибки
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(); }); });
Если вы хотите вернуться с кодом ошибки и хотите увидеть вывод ошибок Karma, но не трассировку стека Gulp (вероятно, не связанную):
gulp.task('test', function() { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: true }, function(karmaExitStatus) { if (karmaExitStatus) { process.exit(1); } }); });
Не уверен в Ubuntu, но я получал аналогичную ошибку в Windows, и установка одной версии обратно исправила ее сразу так:
npm install -g gulp@3.8.8 npm install gulp@3.8.8
Это способ gulp сказать, что ваши тесты потерпели неудачу, и что карма вышла с кодом возврата 1. Почему вы хотите позвонить сами и не передать ошибку, поскольку сообщение озадачивает меня.
правильный способ решить эту проблему в соответствии с документацией кармы и https://github.com/pkozlowski-opensource, полагаться на часовой механизм кармы, а не на глоток:
gulp.task('tdd', function (done) { karma.start({ configFile: __dirname + '/karma.conf.js' }, done); });
обратите внимание на бездействие
singleRun: true
.@mcdamon обходной путь будет работать для
gulp.watch
, но вы не хотите глотать коды выхода, как это при запуске на сервере CI.Gulp также перерабатывает, как они обрабатывают коды выхода в сценариях, подобных этому. Видеть https://github.com/gulpjs/gulp/issues/71 и еще около десятка связанных с этим вопросов.
gulp.task('test', function(done) { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: false }, done); });
передает
singleRun: false
аргумент не позволит процессу возвращать значение, отличное от 0 (что будет означать ошибку и выход из gulp).запустить с
singleRun: true
Если вы запускаете тест только из командной строки, а не из пакета непрерывной интеграции.
в случае, если кто-то еще придет сюда, не используйте принятое решение. Он скроет неудачные тесты. Если вам нужно быстрое решение для изменения тестовой задачи gulp, вы можете использовать решение, найденное в этом комментарий на этой поток github.
gulp.src(src) // pipeline... .on('error', function (error) { console.error('' + error); });