web-dev-qa-db-fra.com

Pourquoi mes tests AngularJS, Karma/Jasmine fonctionnent-ils si lentement?

J'ai quelques tests unitaires simples de karma/jasmin qui fonctionnent contre une application angularjs. J'utilise la dernière version de Chrome et exécute mes tests à partir de l'EDI WebStorm.

Parfois, la suite de tests s'exécute très rapidement (0,24 seconde)

Parfois, la même suite de tests contre exactement le même code s'exécute très lentement (120 secondes)

J'ai essayé tous les correctifs de bon sens. J'ai parcouru le Web pour essayer de découvrir ce que je faisais mal.

Pourquoi mes tests se déroulent-ils si lentement?

48
biofractal

La réponse s'avère très simple.

J'utilise Chrome pour exécuter le serveur Karma. Lorsque vous démarrez le serveur Karma pour la première fois, une instance de Chrome est démarrée sous forme de fenêtre agrandie. Donc, naturellement, vous minimisez cela afin que vous puissiez voir vos tests en cours.

Le problème est que Chrome prive tous les onglets minimisés ou secondaires (onglets commutés) des cycles du processeur. 

Par conséquent, si vous réduisez l'instance de navigateur exécutant le serveur karma ou si vous passez simplement à un onglet différent, le serveur karma est gravement dépourvu de ressources processeur et les tests prennent beaucoup de temps.

La solution consiste à garder l'onglet de karma actif. La fenêtre du navigateur peut être masquée derrière d’autres fenêtres mais l’onglet karma doit être l’onglet sélectionné et le navigateur ne doit pas être minimisé

En respectant ces règles simples, vos tests seront toujours exécutés à toute vitesse.

117
biofractal

Biofractal a répondu à sa propre question et vous pouvez le faire. Vous pouvez également configurer vos tests pour qu'ils s'exécutent dans PhantomJS ou Chrome Headless, ce qui permet essentiellement aux tests unitaires de s'exécuter uniquement dans votre ligne de commande, supprimant ainsi les effets d'un navigateur Web. 

0
Jim