Exécution d'un seul fichier de test


139

Existe-t-il un moyen d'exécuter ng testpour un seul fichier au lieu de pour toute la suite de tests? Idéalement, j'aimerais obtenir la boucle de rétroaction la plus rapide possible lorsque je modifie un fichier, mais karmaexécute toute la suite à chaque sauvegarde, ce qui est un peu lent lorsque vous créez une suite de tests suffisamment grande.


Ceci est différent de Comment exécuter une seule spécification de test avec angular-cli en ce que cette question concerne l'exécution d'une spécification individuelle. Il s'agit d'exécuter un fichier individuel. La solution implique la même fonctionnalité de spécification Jasmine, mais la nature de la question est légèrement différente.



Vous pouvez trouver une réponse ici: stackoverflow.com/questions/40683673/…
Sahil Shikalgar

Vous pouvez trouver une réponse ici: stackoverflow.com/questions/40683673/…
Sahil Shikalgar

Réponses:


263

J'ai découvert que Jasmine vous permet de préfixer describeet de itméthodes avec un f(pour le focus?). Alors, fdescribeet fit. Si vous utilisez l'un ou l'autre de ces derniers, karma n'exécutera que les tests appropriés. Ainsi, pour concentrer le fichier actuel, vous pouvez simplement prendre le niveau supérieur describeet le changer en fdescribe. Fonctionne pour mes besoins.


9
legendary answer
danday74

2
Je ne peux pas croire qu'une fonctionnalité aussi importante ne soit pas plus évidente et simple.
Ash

10
cela fonctionne mais ce n'est pas idéal car vous devez changer le code source et vous pouvez finir par archiver le code modifié dans le contrôle de code source.
Marco Altieri

4
Veuillez ajouter des liens vers la documentation officielle , lorsque cela est possible
jgpATs2w

J'ai cherché ceci, Awesome
Carlos E

26

Il est à noter que vous pouvez désactiver un test particulier sans commenter xdescribeetxit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

Et comme quelqu'un l'a déjà dit, si vous voulez vous concentrer sur un test alors fdescribeetfit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

25

Ceci peut être réalisé ces jours-ci via l' includeoption. https://angular.io/cli/test#options

C'est une correspondance globale, donc à titre d'exemple:

ng test --include='**/someFolder/*.spec.ts'

Je ne peux pas le trouver dans les notes de version 8.1.0 , mais @Swoox mentionne ci-dessous qu'il s'agit d'une fonctionnalité après la version cli 8.1.0. Merci d'avoir compris cela.


1
Cela semble être une mise à jour récente. Pourrait vouloir inclure quelle version est nécessaire. CLI 8.1 est nécessaire.
Swoox le

Semble être supprimé dans la v9.1 :(
rmcsharry

2
Je viens de tester cela dans CLI v9.1.0 et cela fonctionne parfaitement.
Sajjan Singh

9

J'ai trouvé qu'il y ng testavait une option supplémentaire --includeque vous pouvez utiliser afin de pouvoir exécuter un test pour un seul fichier, ou pour un répertoire particulier, ou pour un tas de fichiers:

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

ng cli docs


Angular 9 - il semble avoir été supprimé
rmcsharry

Non, il est toujours disponible en NG 9.
tephyr

6

Vous pouvez accéder à src/test.tset modifier la ligne suivante:

const context = require.context('./', true, /\.spec\.ts$/);

à

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

entrez la description de l'image ici


1
À proprement parler, cela semble être la réponse la plus correcte, même si la plupart des questions sur la façon de le faire ont résolu le problème en utilisant fit et fdescribe. Il y a un problème git pour accomplir cela plus facilement dans Karma: github.com/karma-runner/karma/issues/1507 . Idéalement, mais pas simplement, nous pourrions configurer Karma afin de pouvoir apporter des modifications à un test, puis cliquer dessus dans le navigateur pour le réexécuter avec la mise à jour.
pumpkinthehead



0

Vous devez y aller src/test.tset pouvez modifier le code de numéro de ligne 18 suivant:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

à

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

entrez la description de l'image ici


-3

Fonctionne si vous spécifiez votre fichier de spécifications en tant que paramètre.

Par exemple:

ng test foo.spec.ts

J'espère que cela t'aides.


4
Pouvez-vous spécifier la version que vous utilisez? Ne fonctionne pas avec 1.7.x
FrEaKmAn

4
Cela n'a pas fonctionné tel quel pour moi non plus. Mais je l'ai modifié pour fonctionner avec l'option --main avant le chemin d'accès au fichier de spécification. J'ai utilisé un chemin absolu avec des barres obliques. Je n'ai pas essayé un chemin relatif. Utiliser Angular 6. Je ne sais pas si c'est la meilleure solution, mais cela semble fonctionner pour moi.
user2367418
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.