J'ai un projet Angular2 construit avec Angular-CLI (beta 20).
Existe-t-il un moyen d'exécuter des tests sur un seul fichier de spécifications sélectionné?
J'avais un projet basé sur le démarrage rapide Angular2, et je pouvais ajouter manuellement des spécifications au fichier jasmine. Mais je ne sais pas comment configurer cela en dehors des tests de karma ou comment limiter les tests de karma à des fichiers spécifiques avec des versions Angular-CLI.
la source
fdescribe
ouxdescribe
? Je ne veux pas qu'un critique bâclé (moi) fusionne un PR qui saute tous mes tests.Configurer le
test.ts
fichier dans lesrc
dossier:Remplacez
/\.spec\.ts$/
par le nom de fichier que vous souhaitez tester. Par exemple:/app.component\.spec\.ts$/
Cela exécutera le test uniquement pour
app.component.spec.ts
.la source
Vous pouvez tester uniquement un fichier spécifique avec la CLI angulaire (la
ng
commande) comme ceci:D'autres documents sont disponibles sur https://angular.io/cli/test
Notez que bien que cela fonctionne pour les fichiers de bibliothèque autonomes, cela ne fonctionnera pas pour les composants angulaires / services / etc. En effet, les fichiers angulaires ont des dépendances sur d'autres fichiers (notamment
src/test.ts
dans Angular 7). Malheureusement, le--main
drapeau ne prend pas plusieurs arguments.la source
component.spec.ts
fichier généré automatiquement , nous verrons que les tests ne démarrent jamais:Error: AsyncTestZoneSpec is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/async-test.js
... Je suis sûr que d'autres solutions de contournement peuvent être piratées ensemble, mais il faut être conscient de parce que la configuration effectuée danssrc/main.ts
et ses importations ne sont pas disponibles dans ce cas.ng t
le test que j'écris réussit, mais lorsque j'exécute le fichier spécifique, cela donne une erreur. TypeError: impossible de lire la propriété 'getComponentFromError' de null à TestBedViewEngine._initIfNeeded (node_modules/@angular/core/fesm2015/testing.js: 3112: 1) à TestBedViewEngine.get (node_modules/@angular.j201s) 3230: 1) sur Function.get (node_modules/@angular/core/fesm2015/testing.js: 2960: 1) sur UserContext. <anonyme> (src / app / timebar.service.spec.ts: 14: 45) "Si vous voulez pouvoir contrôler quels fichiers sont sélectionnés à partir de la ligne de commande, j'ai réussi à le faire pour Angular 7.
En résumé, vous devez installer
@angular-devkit/build-angular:browser
puis créer un plugin webpack personnalisé pour passer le fichier de test regex. Par exemple:angular.json - changez le générateur de test
@angular-devkit/build-angular:browser
et définissez un fichier de configuration personnalisé:extra-webpack.config.js - crée une configuration webpack qui lit l'expression régulière à partir de la ligne de commande:
test.ts - modifier la spécification
Ensuite, utilisez comme suit pour remplacer la valeur par défaut:
J'ai documenté la trame de fond ici , des excuses à l'avance pour les types et les mauvais liens. Merci à la réponse ci-dessus par @ Aish-Anu pour m'avoir pointé dans la bonne direction.
la source
Cela fonctionne pour moi dans Angular 7. Il est basé sur l'option --main de la commande ng. Je ne sais pas si cette option est non documentée et peut-être sujette à changement, mais cela fonctionne pour moi. J'ai mis une ligne dans mon fichier package.json dans la section scripts. Là, en utilisant l'option --main de avec la commande ng test, je spécifie le chemin d'accès au fichier .spec.ts que je veux exécuter. Par exemple
Vous pouvez exécuter le script lorsque vous exécutez un tel script. Je l'exécute dans Webstorm en cliquant sur "test 1" dans la section npm.
la source
J'ai résolu ce problème pour moi-même en utilisant grunt. J'ai le script grunt ci-dessous. Ce que fait le script, c'est de prendre le paramètre de ligne de commande du test spécifique à exécuter, de créer une copie de test.ts et d'y placer ce nom de test spécifique.
Pour l'exécuter, installez d'abord grunt-cli en utilisant:
Mettez les dépendances grunt ci-dessous dans votre package.json:
Pour l'exécuter, enregistrez le fichier grunt ci-dessous sous le nom Gruntfile.js dans votre dossier racine. Ensuite, à partir de la ligne de commande, exécutez-le comme:
Cela exécutera app.component.spec.ts.
Le fichier Grunt est comme ci-dessous:
la source
Ajout à cela pour les gens comme moi qui cherchaient un moyen d'exécuter une seule spécification dans Angular et ont trouvé ce SO.
Selon la dernière documentation Angular (v9.0.6 au moment de l'écriture), la
ng test
commande a une--include
option où vous pouvez spécifier un répertoire de*.spec.(ts|tsx)
fichiers ou juste un seul.spec.(ts|tsx)
fichier lui-même.https://angular.io/cli/test
la source
Juste un petit changement nécessaire dans le
test.ts
fichier dans le dossier src:Voici
test-example
le nom exact du fichier dont nous avons besoin pour exécuterDe la même manière, si vous avez besoin de tester le fichier de service uniquement, vous pouvez remplacer le nom de fichier comme "/test-example.service"
la source
Cela a fonctionné pour moi dans tous les cas:
Cependant, j'ai généralement "TypeError: Cannot read property 'ngModule' of null" pour ceci:
Version de @ angular / cli 10.0.4
la source