Dois-je utiliser Protractor ou Karma pour mes tests de bout en bout? [fermé]

124

Dois-je utiliser Protractor ou Karma pour mes tests de bout en bout?

Angular-seed utilise Protractor / Selenium WebDriver pour E2E mais le didacticiel angular-phonecat utilise le karma.

J'ai lu que je devrais utiliser Karma pour les tests unitaires et Protractor pour E2E, ce qui semble bien, mais j'ai pensé que je demanderais ici pour obtenir les opinions d'autres développeurs.

screenm0nkey
la source
1
Meilleur ajustement pour les recommandations de logiciels . Cependant, si vous postez cette question là-bas, vous devrez préciser quelles sont vos exigences. Méta connexe
Professeur Allman
5
Karma et Protractor sont tous deux utilisés et recommandés par l'équipe Angular, mais étant donné l'état de la documentation (c'est-à-dire: il y en a des tonnes et il est difficile de savoir ce qui est à jour), il est difficile de savoir lequel utiliser et dans quel but. C'est une bonne question et la réponse de Glpretre était exactement ce que je cherchais aussi.
Matt
5
Je ne pense pas que la question soit trop large (Protractor vs Karma). Ce sont des frameworks dont nous parlons ici, pas seulement quelques logiciels, donc la question est à sa place.
CCC
Voir ma réponse ici pour une discussion plus détaillée des cas d'utilisation, des avantages et des limites de Karma et Protractor: stackoverflow.com/a/29619467/1614973
Dmitri Zaitsev
Je crois comprendre que Protractor ne permet pas de tester uniquement une partie de votre application sans la présence du reste (par exemple moquerie): le code de test ne fonctionne même pas dans le même interpréteur JS que l'application. Pas de surveillance du système de fichiers pour les modifications du code source et le re-déclenchement automatique des tests affectés. Karma fournit ces derniers. Il envoie le code de test + le code de l'application dans les <script> s au navigateur afin qu'ils s'exécutent dans le même interpréteur, moqueur possible, mais n'est pas conçu pour des tests de bout en bout avec des événements natifs comme si un utilisateur réel agissait.
robert4

Réponses:

179

L'équipe AngularJS recommande d'utiliser Protractor car il va remplacer le coureur de scénario angulaire:

Angular Scenario Runner est en mode maintenance - Si vous démarrez un nouveau projet Angular, envisagez d'utiliser Protractor .

cité de la documentation AngularJs .

Le tutoriel angular-phonecat a été développé il y a longtemps (en 2011 principalement) et n'a pas encore été mis à jour pour utiliser certaines nouvelles fonctionnalités angulaires comme Protractor.

ÉDITER

Dans la documentation Protractor - FAQ :

Pourquoi Karma et Protractor? Quand dois-je utiliser lequel?

Karma est un excellent outil pour les tests unitaires, et Protractor est destiné aux tests de bout en bout ou d'intégration. Cela signifie que de petits tests pour la logique de vos contrôleurs, directives et services individuels doivent être exécutés à l'aide de Karma. Les gros tests dans lesquels vous avez une instance en cours d'exécution de l'ensemble de votre application doivent être exécutés à l'aide de Protractor. Protractor est destiné à exécuter des tests du point de vue d'un utilisateur - si votre test peut être écrit sous forme d'instructions pour un humain interagissant avec votre application, il doit être un test de bout en bout écrit avec Protractor.

Voici un excellent article de blog avec plus d'informations.

glepretre
la source
11
De Karma FAQ - karma-runner.github.io/0.10/intro/faq.html - Puis-je utiliser Karma pour faire des tests de bout en bout? Karma a été principalement conçu pour les tests de bas niveau (unitaires). S'il s'agit d'une application AngularJS, vous pouvez utiliser Karma avec le plugin karma-ng-scenario, mais nous recommandons Protractor pour des tests de haut niveau.
mrwaim
Si je veux des tests unitaires ainsi que des tests e2e, je dois configurer l'environnement karma pour les tests unitaires et le rapporteur pour les tests d'interface utilisateur ou les tests e2e?
Sunil Garg
2
@SunilGarg Oui, vous devez, peut-être que notre structure d'application de démarrage pourrait vous aider: github.com/glepretre/angular-requirejs-ready (ignorez les spécificités de requireJS si vous ne l'utilisez pas)
glepretre