Karma: Ausführen einer einzelnen Testdatei über die Befehlszeile

91

Also habe ich überall danach gesucht und hier "ähnliche" Antworten gefunden, aber nicht genau das, was ich will.

Gerade jetzt , wenn ich eine einzelne Datei mit Karma testen will, muß ich tun fit(), fdescribe()auf der Datei in Frage ...

Ich möchte jedoch, dass ich mit der Konfigurationsdatei einfach Karma aufrufen und in eine bestimmte Datei leiten kann, sodass ich die Datei überhaupt nicht ändern muss, dh:

karma run --conf karma.conf.js --file /path/to/specific/test_file.js

ist das möglich? Oder mit einem Helfer? (mit Grunzen oder Schlucken?)

Gonçalo Vieira
quelle
1
Versucht karma run -- --grep=testDescriptionFilter? Ich habe diesen Vorschlag schon einmal gesehen, kann aber nicht aus erster Hand überprüfen, ob er funktioniert. (Wenn ich zu Hause wäre, würde ich es versuchen, bevor ich es vorschlage. Da ich es nicht versuchen kann, kommentiere ich anstatt zu antworten.) :)
bvaughn
1
ist das nicht nur für einen bestimmten it? Keine Möglichkeit, es für eine Datei zu verwenden?
Gonçalo Vieira
3
Um ehrlich zu sein, habe ich karma.conf immer nur geändert, wenn ich mich auf eine einzelne Testdatei konzentrieren möchte. Es ist einfach genug, dass ich mir nie die Mühe gemacht habe, einen schnelleren Weg zu finden.
Bvaughn
1
Hotdog. Ich bin froh, dass es geholfen hat. Gesendet. :)
Bvaughn

Antworten:

59

Zuerst müssen Sie den Karma-Server mit starten

karma start

Anschließend können Sie mit grep einen bestimmten Test filtern oder einen Block beschreiben:

karma run -- --grep=testDescriptionFilter
bvaughn
quelle
12
Diese Antwort sollte sagen, dass Sie karmamit karma startlaufen sollten , bevor Sie laufenkarma run
etagwerker
4
Ich denke nicht wirklich, dass das notwendig ist, da die Frage nach dem Filtern gestellt wurde karma run. Es schien ziemlich klar zu sein, dass das Poster wusste, wie man Karma startet und alle Tests ausführt, und nur nach der Syntax für das Filtern suchte.
Bvaughn
2
Was kann ich tun, wenn dies programmgesteuert erfolgen soll? Das heißt, ich würde die Beschreibung der Datei, die sich geändert hat, nicht kennen, aber ich würde den Dateinamen kennen.
MPV
2
Diese Lösung scheint bei Jasmin-Tests (Karma-Jasmin) überhaupt nicht zu funktionieren. Und der Karma-Lauf --help zeigt --grep überhaupt nicht als Befehlsoption an. Ich benutze Karma spätestens (es heißt 1.5.0).
Yavin5
9
Dies führt keinen einzigen Test durch!
eav
16

Obwohl dies --filesnicht mehr unterstützt wird, können Sie eine env-Variable verwenden, um eine Liste von Dateien bereitzustellen:

// karma.conf.js
function getSpecs(specList) {
  if (specList) {
    return specList.split(',')
  } else {
    return ['**/*_spec.js'] // whatever your default glob is
  }
}

module.exports = function(config) {
  config.set({
    //...
    files: ['app.js'].concat(getSpecs(process.env.KARMA_SPECS))
  });
});

Dann in CLI:

$ env KARMA_SPECS="spec1.js,spec2.js" karma start karma.conf.js --single-run
Yuriy Kharchenko
quelle
1
Das funktioniert großartig! Stellen Sie einfach sicher, dass Ihr Standard-Glob einen Verzeichnisnamen auf der Vorderseite hat, sonst wird ein Musterfehler angezeigt. Außerdem habe ich meine Datei geändert: Definition wie folgt: files: [] .concat (getSpecs (process.env.KARMA_SPECS)), und das hat besser funktioniert, weil die Funktion dort bereits das Glob-Muster einfügt, wenn keine Umgebungsvariable vorhanden ist einstellen. Oh, und ich glaube nicht, dass Sie das "env" auf der Vorderseite des Befehls benötigen (es funktioniert für mich ohne das). Vielen Dank für diese Lösung @Yuriy Kharchenko!
Yavin5
6

Diese Option wird in neueren Versionen von Karma nicht mehr unterstützt:

Siehe https://github.com/karma-runner/karma/issues/1731#issuecomment-174227054

Das Dateiarray kann mithilfe der CLI als solche neu definiert werden:

karma start --files=Array("test/Spec/services/myServiceSpec.js")

oder entkommen:

karma start --files=Array\(\"test/Spec/services/myServiceSpec.js\"\)

Verweise

Paul Sweatte
quelle
2
gibt mir diesen Fehler - bash: Syntaxfehler in der Nähe von unerwartetem Token `('
Lakshay
5
Wenn ich dies versuche, wird folgende Fehlermeldung config.files = config.files.map(createPatternObject).map(createPatternMapper(basePathResolve))angezeigt: Was kann an der Tatsache liegen, dass ich requireJS verwende?
Gonçalo Vieira
1
ähm, nicht wegen requireJS, aus irgendeinem seltsamen Grund liest Karma Array ("zzz") nicht als JS-Array? O_o
Gonçalo Vieira
2
nm, es scheint, dass Karma ein --files arg nicht mehr unterstützt?
Gonçalo Vieira
23
Warnung für alle, die hierher kommen, diese Option wird im Karma nicht mehr unterstützt: github.com/karma-runner/karma/issues/…
Dignifiedquire