Soru Gulp'dan karma görev yürütme sorunu


Karma testleri gulp görevinden çalıştırmaya çalışıyorum ve bu hatayı alıyorum:

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)

Sistemim Windows 7, nodejs sürümü v0.10.32, incir sürümü:

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

Ayrıca, aynı hatayı alıyorum Ubuntu 12.04 LTS daha yeni Ubuntu (hangi sürümünden emin değil) ve mac os iken çalışıyor gibi görünüyor. Bu hatayı neden olabilir?

5/11/2016 Güncellemesi: Kabul edilen yanıtın hataları gizlediği gerçeği hakkında yorum yazmadan önce, lütfen bu iki kabul edilen cevaba ilk iki yorumu görün. Sadece ne yaptığını biliyorsan onu kullan. İlgili bilgi: https://github.com/karma-runner/gulp-karma/pull/15


63
2017-10-28 17:29


Menşei




Cevaplar:


Testlerini Gulp ile nasıl koşuyorsun? Geçenlerde OSX'de bu soruna karşı çıktım. v0.11.14 ve gulp 3.8.10Ne zaman başarısızlık testleri yapıldıysa.

Tavsiye edilenlerden değiştirme:

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

Kime:

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

... bu hatadan kurtuldu.

Bir geri çağrıda bir hata bildirildiğinde, gulp'un hata mesajlarını nasıl işlediğine bağlı gibi görünüyor. Görmek Çıkışta hata mesajlarını iyileştirin daha fazla bilgi için.


128
2017-11-16 16:06



İlginç bir çözüm. Yani bu bir sorun değil ama yanlış hata işleme ve gulp işleniyor gibi görünüyor. Çözümünüzün bir dezavantajı var: gulp kendi başına bir hatayı rapor etmeyecek ve eğer biri olursa, günlüklere bakmak zorunda kalacaksınız. Ama benim için kabul edilebilir. teşekkür ederim - Timur
Teşekkürler, bağlantıya göre olsa, function(exitStatus) { done(exitStatus ? "There are failing unit tests" : undefined); } Hatayı Gulp'e iletmek için - Karma raporlama mekanizması benim için iyi değildi. - McDamon
Cidden bunun herhangi bir sorunu nasıl çözdüğünü bilmiyorum ... AT ALL. Her şeyden önce done geri arama çıkış durumuna ihtiyaç duyar. Biri (bilinmeyen bir sorun için bir düzeltme olarak) sağlamayı seçmezseniz, test görevinizin hiçbir anlamı yoktur: testler başarısız olabilirama senin yiğit görevinden çıkmayacak, diğer görevleri yerine getirecek testleriniz geçmiş gibi. Benim amacım, eğer bu bir çözüm, hiç bir problemi çözmez! Testleri devre dışı bırakmak daha iyi bir çözüm olacaktır :) - gion_13
Bu çok yanlış ve yanıltıcı bir cevaptır: Bu değişikliği yapmak, hata ihmalkarının uygun çıkış koduyla çıkmayacağı, bunun yerine 0 ile çıkacağını, hatalı bir işlem için doğru çıkış kodunu bildirmesi anlamına gelir. Bu bir CI sunucusundaki şeyleri kırabilir, komutların zincirlenmesi vb. YAPMAYIN. - pkozlowski.opensource
Görmek: github.com/ONE-LOGIC/gulp-modular-karma/commit/... çıkış kodunu bozmayan çalışma çözümü için - Avindra Goolcharan


Bu çözümlerin hiçbiri gulp 3.9.1 ve karma 1.1.1 kullanarak benim için doğru bir şekilde çalışmadı. Gulp-utillarına bir referans ekleme npm install --save-dev gulp-util ve görevi aşağıdaki şekilde güncellemek, çıkış durumunu doğru bir şekilde korurken, hata çıkışını çok güzel bir şekilde düzeltir.

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
2017-07-19 20:48



Ek bir bağımlılık olmasına rağmen benim için en iyi çözüm. Ancak, eğer testler başarısız olursa ve sonuçta yığın izi kalmazsa, çalışma başarısız olur. - Marc Scheib


Aşağıda, Karma'yı kullanan gulp kalıplarından bir kod snippet'i bulunmaktadır. Biraz benzer, fakat aynı zamanda yeni metodu da karmayı nasıl başlatacağını kullanıyor.

/**
 * 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
2017-08-17 06:53



config Tanımlanmadı - Andi Giga
merhaba, sadece dışlanacak dosyaların bir listesini tanımlar. config.serverIntegrationSpecs = ['* /.spec.js'] - Igor Lino


Benim için ne çalıştı ve güzel biçimlendirilmiş bir hata mesajı verdi bir Hata örneğini sağlamaktır. done geri aramak.

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
2018-03-26 19:37



Bu daha kısa olmasına rağmen benim için hala bir StackTrace oluşturur. Ve bunun hiçbir ek depsi yok (bununla birlikte, stacktrace yaratmayan gulp-util çözümü). - Marc Scheib


Bir hata koduyla geri dönmek istiyorsanız ve Karma'nın hata çıktısını görmek istiyorsanız, ancak Gulp'in (muhtemelen ilgisiz) yığın izini görmek istemiyorsanız:

gulp.task('test', function() {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, function(karmaExitStatus) {
           if (karmaExitStatus) {
               process.exit(1);
           }
    });
});

2
2017-07-08 04:55





Ubuntu hakkında emin değilim, ancak Windows üzerinde benzer bir hata alıyorum ve bir sürümü geri yüklemek şu şekilde düzeltildi:

npm install -g gulp@3.8.8
npm install gulp@3.8.8

1
2017-10-30 03:05





Bu, gulp'un testlerinizin başarısız olduğunu ve bu karma'nın 1'lik bir dönüş koduyla çıkmasını söyleme yoludur. Neden aramak istediğinizi kendiniz yapın ve hatayı iletmek için bir mesaj olarak beni şaşırtmayın.


1
2018-03-16 07:54





Karma'nın belgelerine göre bunu çözmenin doğru yolu ve https://github.com/pkozlowski-opensource, Gulp'ten ziyade Karma'nın saat mekanizmasına güvenmek:

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

İhmal unutmayın singleRun: true.

@ McDamon'un çözümü için çalışacak gulp.watchAncak, CI sunucusunda çalışırken çıkış kodlarını böyle yutarsınız.

Gulp ayrıca, bunun gibi senaryolarda çıkış kodlarını nasıl ele aldıklarını yeniden gözden geçiriyor. Görmek https://github.com/gulpjs/gulp/issues/71 ve diğer düzine ya da çok ilgili konular.


0
2018-04-30 13:49