Karma: exécution d'un seul fichier de test à partir de la ligne de commande

93

Donc, j'ai cherché partout pour cela, j'ai trouvé des réponses «similaires» ici, mais pas exactement ce que je veux.

En ce moment, si je veux tester un seul fichier avec karma, je dois le faire fit(), fdescribe()sur le fichier en question ...

Cependant, ce que je veux, c'est pouvoir simplement appeler karma, avec le fichier de configuration, et le diriger vers un fichier spécifique, donc je n'ai pas du tout besoin de modifier le fichier, c'est-à-dire:

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

Est-il possible de faire cela? Ou avec n'importe quel assistant? (en utilisant grunt ou gulp?)

Gonçalo Vieira
la source
1
Essayé karma run -- --grep=testDescriptionFilter? J'ai déjà vu cela suggéré, mais je ne peux pas vérifier de première main que cela fonctionne. (Si j'étais à la maison, j'essaierais avant de suggérer. Puisque je ne peux pas essayer- Je commente au lieu de répondre.) :)
bvaughn
1
n'est-ce pas juste pour un particulier it? Pas de possibilité de l'utiliser pour un fichier?
Gonçalo Vieira
3
Pour être honnête, j'ai toujours juste modifié karma.conf si je veux me concentrer sur un seul fichier de test. C'est assez facile à faire que je n'ai jamais dépensé l'effort de trouver un moyen plus rapide.
bvaughn
1
Hot-dog. Heureux que cela ait aidé. Publié. :)
bvaughn

Réponses:

59

Vous devez d'abord démarrer le serveur karma avec

karma start

Ensuite, vous pouvez utiliser grep pour filtrer un test spécifique ou décrire un bloc:

karma run -- --grep=testDescriptionFilter
bvaughn
la source
12
Cette réponse devrait dire que vous devriez avoir karmaexécuté avec karma startavant de courirkarma run
etagwerker
4
Je ne pense pas vraiment que ce soit nécessaire, étant donné que la question demandait comment filtrer avec karma run. Il semblait assez clair que l'affiche savait comment démarrer Karma et exécuter tous les tests et cherchait juste la syntaxe concernant le filtrage.
bvaughn
2
Que puis-je faire si je veux que cela se produise par programmation? Ie je ne connais pas la description du fichier qui a changé, mais je connais son nom de fichier.
MPV
2
Cette solution semble ne pas fonctionner du tout avec les tests Jasmine (karma-jasmine). Et le karma run --help n'affiche pas du tout --grep comme option de commande. J'utilise le dernier Karma (il dit 1.5.0).
Yavin5
9
cela n'exécute pas un seul test!
eav
16

Même si ce --filesn'est plus pris en charge, vous pouvez utiliser une variable env pour fournir une liste de fichiers:

// 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))
  });
});

Puis dans CLI:

$ env KARMA_SPECS="spec1.js,spec2.js" karma start karma.conf.js --single-run
Yuriy Kharchenko
la source
1
Cela finit par fonctionner très bien! Assurez-vous simplement que votre glob par défaut a un nom de répertoire sur le devant de celui-ci, sinon vous obtenez une erreur de modèle. Aussi, j'ai changé mes fichiers: définition comme celle-ci: files: [] .concat (getSpecs (process.env.KARMA_SPECS)), Et cela a fini par mieux fonctionner, car la fonction met déjà le modèle glob là-bas si aucune variable d'environnement n'est ensemble. Oh, et je ne pense pas que vous ayez besoin du "env" sur le devant de la commande (ça marche pour moi sans ça). Merci pour cette solution @Yuriy Kharchenko!
Yavin5
6

Cette option n'est plus prise en charge dans les versions récentes de karma:

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

Le tableau de fichiers peut être redéfini en utilisant la CLI comme tel:

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

ou échappé:

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

Références

Paul Sweatte
la source
2
me donne cette erreur - bash: erreur de syntaxe près de jeton inattendu `('
Lakshay
5
donc, lorsque j'essaye cela, j'obtiens l'erreur suivante config.files = config.files.map(createPatternObject).map(createPatternMapper(basePathResolve)):, ce qui peut être dû au fait que j'utilise requireJS?
Gonçalo Vieira
1
Euh, pas à cause de requireJS, pour une raison étrange, le karma ne lit pas Array ("zzz") comme étant un JS Array? O_o
Gonçalo Vieira
2
nm, il semble que karma ne supporte plus un argument --files?
Gonçalo Vieira
23
Avertissement pour tout le monde à venir ici cette option est plus prise en charge dans le karma: github.com/karma-runner/karma/issues/...
dignifiedquire