Ignorer individuellement les tests individuels avec Karma / Jasmine
J'ai quelques tests qui échouent dans PhantomJS, mais pas les autres navigateurs.
J'aimerais que ces tests soient ignorés lors de l'exécution avec PhantomJS dans ma montre tâche (donc de nouvelles fenêtres de navigateur de ne pas prendre le focus et la perf est un peu plus rapide), mais dans mon test standard de la tâche et mon CI pipeline, je veux tous les tests à exécuter dans Chrome, Firefox, etc...
Je l'ai considéré comme une convention de nommage des fichiers comme foo.spec.dont-use-phantom.js
et à l'exclusion de ceux dans mon Karma de config, mais cela signifie que je vais avoir à séparer les différents tests qui échouent dans leurs propres fichiers, en les séparant de leur logique describe
blocs et avoir plus de fichiers avec bizarre conventions de nommage serait généralement sucer.
En bref:
Est-il une manière que je peux étendre le Jasmin et/ou du Karma, et en quelque sorte annoter tests individuels à ne fonctionner avec certaines configurations?
source d'informationauteur Zach Lysobey
Vous devez vous connecter pour publier un commentaire.
Je peux partager mon expérience avec cette.
Dans notre environnement, nous avons plusieurs tests avec différents navigateurs et différentes technologies.
Afin d'exécuter toujours les mêmes suites sur toutes les plateformes et navigateurs, nous avons un helper fichier chargé dans le karma (
helper.js
) avec certains disposent de fonctions de détection chargé à l'échelle mondiale.I. e.
Vous pouvez aussi utiliser Modernizr pour cela ainsi.
Lors de nos tests, puis nous envelopper les choses dans
if/else
blocs comme suit:ou pour un async test
Alors que c'est un peu verbeux, il vous fera gagner du temps pour le genre de scénario que vous êtes confrontés.
Dans certains cas, vous pouvez utiliser de l'utilisateur de l'agent sniffing pour détecter un particulier, le type de navigateur ou de la version je sais que c'est une mauvaise pratique, mais parfois il n'y a effectivement pas d'autre moyen.
Jasmin soutien dans l'attente de la fonction.
Si vous appelez la fonction d'attente de n'importe où dans le spec corps, peu importe les attentes, les spec sera marqué en attente.
Vous pouvez appeler directement dans l'attente de test, ou dans une autre fonction appelée au cours de l'essai.
exemple ici: http://plnkr.co/edit/JZtAKALK9wi5PdIkbw8r?p=preview
Je pense que c'est la plus pure de la solution. Dans les résultats du test, vous pouvez voir le nombre de terminé et a sauté tests. Il est plus instructif contre la substitution de test corps par des conditions.
La solution la plus simple que je vois, c'est pour remplacer des fonctions globales
describe
etit
de leur faire accepter troisième argument optionnel, qui doit être une valeur booléenne ou une fonction retournant un booléen pour dire si oui ou non courant de la suite/spécification doit être exécutée. Lors de la substitution il est conseillé de vérifier si ce troisième argument optionnel décide detrue
et si c'est le cas, nous appelonsxdescribe
/xit
(ouddescribe
/iit
selon le Jasmin version), qui sont de Jasmine méthodes d'ignorer suite/spec, istead d'originedescribe
/it
. Ce bloc doit être exécuté avant les tests, mais après le Jasmin est inclus à la page. Dans le Karma il suffit de déplacer ce code dans un fichier et de l'inclure avant d'fichiers de test danskarma.conf.js
. Voici le code:Et exemple d'utilisation:
Voir un exemple ici
J'ai aussi tombé sur ce problème où l'idée était d'ajouter une chaîne de méthode
.when()
pourdescribe
etit
qui va faire à peu près la même chose, j'ai décrit ci-dessus. Il peut sembler agréable, mais est un peu plus difficile à mettre en œuvre.Si vous êtes vraiment intéressé dans cette seconde approche, je vais être heureux de jouer avec elle un peu plus et essayer de mettre en œuvre la chaîne de
.when()
.Mise à jour:
Jasmin utilise la troisième argument de l'option timeout (voir les docs), donc mon exemple de code est le remplacement de cette fonctionnalité, qui n'est pas ok. J'aime @milanlempera et @MarcoCI réponses mieux, la mienne semble un peu hacky et pas intuitif. Je vais essayer de mettre à jour ma solution, de toute façon, bientôt, de ne pas casser de compatibilité avec Jasmine fonctionnalités par défaut.
De l'essayer. Je suis à l'aide de cette solution dans mes projets.
Ce ne sera pas exécuter ce test en particulier dans PhantomJS, mais de l'exécuter dans les autres navigateurs.