2016-02-04 14 views
12

Ich möchte das Flag --grep=PATTERN an karma run übergeben, sodass nur bestimmte Tests ausgeführt werden. Aber wenn ich meinen Karma-Server mit karma start karma.conf.js starte, werden alle Jasmine-Komponententests sofort ausgeführt. Da ich mehrere hundert Tests habe, dauert dies zu lange.So führen Sie den Karma-Server aus, ohne Jasmin-Tests zu starten

Frage: Wie kann ich den Karma-Server starten und keine Tests ausführen, sondern nur Tests ausführen, wenn ich karma run aufrufen?

+0

Dies ist nicht einmal annähernd eine Antwort, aber ich Ich bin nur neugierig. Ich mache mehr als 600 ziemlich schwere Tests, die zufällige DOM-Operationen und asynchrone Wartezeiten in weniger als 2 Sekunden auf einer ziemlich langsamen virtuellen Maschine (1 Kern, 6 GB RAM, Win7) beinhalten. Haben Sie nicht daran gedacht, Ihre Testleistung zu überprüfen? Und könnten Sie bitte definieren, wie lange es dauert, Ihre Tests durchzuführen? –

+1

Der Testcode beinhaltet Websocket-Operationen; Ich habe ein benutzerdefiniertes Nachrichtenübermittlungsschema, das über ws entwickelt wurde und die Einheiten sind, die getestet werden, also keine Möglichkeit, sie zu verspotten; die Clients sprechen mit einem Server, der eingebaute Verzögerungen aufweist, sowie Client-eingebaute Verzögerungen, um bestimmtes Netzwerkverhalten zu simulieren; d. h. Rennbedingungen, wenn Sie versuchen, eine Operation von zwei Clients gleichzeitig usw. auszuführen; Leider müssen diese Tests auch seriell ausgeführt werden, um Rennen mit dem Test-Backend-Server zu vermeiden. Wie auch immer, das hängt nicht mit der Frage zusammen. Ich finde es schwer zu glauben, dass Karma + Jasmin keinen TDD-Workflow bietet – Dyna

+1

FYI; Ich wechselte zu Mocha und verwende den nodeJS-basierten Mocha-Runner, der es mir ermöglicht, einen einzelnen Test auszuführen, indem ich das '-Grep'-Flag auf der Cmdline-Ebene übergebe. Karma + Jasmine Geschichte ist traurig zu sein :( – Dyna

Antwort

2

Es klingt wie das, was Sie bevorzugen würden, ist, einen einzelnen Test zu einer Zeit über Karma/Jasmine mit dem Terminal zu führen. Wenn dies korrekt ist, mache ich das, um einzelne Dateitests auszuführen.

Hinweis: Ich benutze Schluck, um Karma aufzuspulen, aber dies sollte immer noch funktionieren, nur mit dem globalen Karma.

Hier ist meine Schluck Methode auch wenn Sie gewählt haben, dass zu verwenden.

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

In meinem karma.config.js

module.exports = function(config) { 

    config.set({ 

    basePath: '', 

    frameworks: ['jasmine'], 

    // Note the **setFilesUpForTesting** function below. Just change this. 
    files: setFilesUpForTesting(), 

    ... the rest of file 
} // end of module!!!!! 

-> Jetzt unterhalb des Moduls, in den gleichen karma.config.js Datei hinzufügen, die folgende

// ------------------------------------------------------------------ > 
// Below code is for running either single or all test files. 
// To run a single test, just pass in the test file name like so... 

// If the test file name was rs-test-me-now_test.js 
// To spool up Karma you would enter 

// gulp karma --single-test=rs-test-me-now 

// To just run all tests 
// gulp karma 

var fixedPath = [ 
    'public/js/jquery.js', 
    'public/js/jquery-ui.min.js', 
    'public/js/foundation.min.js', 
    'public/js/angular.min.js', 
    'public/js/angular-mocks.js', 
    'public/js/angular-route.min.js', 
    'public/js/angular-sanitize.min.js', 
    'public/js/angular-cookies.js' 
    // all the files you want to include when tests run. I removed most of mine, but left some for reference. 
]; 

var baseTestPath = 'public/test/'; // This is the path from root to your test/spec folder that contains all your tests. 

function setFilesUpForTesting(){ 
    fixedPath.push(testPath()); 
    return fixedPath; 
} 

function testPath(){ 
    return singleTestPath() || fullTestPath(); 
} 

function fullTestPath(){ 
    // If your root folder was butter, and all your tests were labeled 
    // like my_file_spec.js, and all your specs were in a folder under root 
    // called bread, then the path below would be 
    // 'butter/bread/**/*_spec.js' Got it? 
    return 'public/test/**/*_test.js'; // change this to suit your path. 
} 

function singleTestPath(){ 
    var passedArgument = process.argv.filter(function(item){ if(/--single-test=/.test(item)){return item; }}); 
    if(isEmpty(passedArgument)){ return false; } 
    return baseTestPath + '**/*' + fileName(passedArgument) + '_test.js'; 
    // change above to fit your path. 
} 

function fileName(argument){ 
    if(!argument){ return; } 
    return argument[0].replace('--single-test=', ''); // Change single-test if you want to. 
} 

function isEmpty(array){ 
    return array.length === 0; 
} 

Wenn ich Tests ausführen möchte, führe ich dann einfach die folgenden

Für einzelne Datei Tests schluck Karma --single-Test = Test-me-now

// when test-me-now_test.js is the file name. 
// and root/pulblic/test/ has all my test files and test folders. 
// or root/bread/butter/ and file is called test-me-now_spec.js as in the other example I gave above. 

hoffe, das hilft jemand. Stellen Sie Fragen, wenn Sie es nicht einrichten können.

UPDATE

ich nur Karma von der Kommandozeile verwendet und das funktioniert, wie auch oben bei der Verwendung von großem Schluck angegeben.

Wenn Karma von der Kommandozeile zugänglich ist Sie jetzt tun können, wenn Sie die karma.config.js oben Datei implementieren ...

Hinweis: ich Karma verwenden nicht Lauf starten,

karma start (will run all tests) 
// or for a single test file 
karma start --single-test=my-test-file-name // but without the _test.js or _spec.js whatever you call your files. I had reasons for doing this, but you can change the functions above to accept the complete file name if needed. 

Hinweis:

Sie können als o Ändern Sie die Formulierung nach "-" in --single-test = Stellen Sie nur sicher, dass Sie die Informationen von karma.config.js aktualisieren, die ich geteilt habe.

+0

Für jeden, der den Start findet, läuft immer noch alles überprüfen Sie, dass Sie in Ihrer Datei "karma.config.js" kein 'browsers'-Element haben. Dies kann dazu führen, dass es alle Tests ausführt und dann beendet wird. – stripybadger

1

Nun, um den Server zum Laufen zu bringen, ist ziemlich einfach. Alles, was Sie tun müssen, ist Ihre karma.conf.js Datei zu ändern. Wenn Sie Folgendes hinzufügen, wird der Server gestartet, ohne einen der Tests auszuführen.

singleRun : true

Nun, wenn Sie laufen, es wird bereit, den Server, aber eigentlich keine Tests durchgeführt. Es wird Ihnen auch ein Browser-Fenster zur Verfügung stellen, das Sie sofort starten können. Schlagen debug wird beginnen, die Tests zu laufen.

enter image description here

Ich habe nie versucht, einzelne Tests zu laufen, aber ich habe das nur überprüft mit karma run auf eigenem löst sich alle auf meinem Server. Also, wenn Sie den Satz mit karma run beschränken, dann sollten Sie sortiert werden.

0

Ich selbst antworten, da gibt es jetzt eine Lösung: Fokus-Tests (https://jasmine.github.io/2.1/focused_specs.html).

können Sie ersetzen Ihre describe() mit fdescribe() einen einzigen Test-Suite zu laufen, oder einen einzigen Test für die Ausführung können Sie ersetzen die it() mit einem fit():

fit("This test is executed on its own because it is prefix with f (focus test)", (done) => { 
    done(); 
});