Comment exécuter des tests unitaires dans tous les navigateurs?

Je n’ai jamais utilisé Selenium mais je suppose que c’est pour simuler l’interaction de l’utilisateur dans tous les navigateurs.

C’est comme les tests d’intégration.

Mais comment tester vos bibliothèques / frameworks js (tests unitaires) sur tous les navigateurs de manière automatisée?

Le meilleur est celui de YUI: http://developer.yahoo.com/yui/3/test/ Mais faire des tests unitaires dans chaque navigateur est un peu difficile … utilisez simplement node.js pour tester plus tard au cas où ils auraient cassé quelque chose.

Pour les tests unitaires, vous pouvez essayer http://code.google.com/p/js-test-driver/

JsTestDriver est un fichier JAR unique qui contient tout ce dont vous avez besoin pour démarrer. Pour plus de détails sur l’option de ligne de commande, voir GettingStarted.

Voici un aperçu du fonctionnement de JsTestDriver à l’exécution …

Vous pouvez consulter TestSwarm :

projet sur lequel je travaille: TestSwarm

Sa construction est très simple. C’est un client JavaScript stupide qui pings continuellement un serveur central à la recherche d’autres tests à exécuter. Le serveur collecte les suites de tests et les envoie aux clients respectifs.

Toutes les suites de tests sont collectées. Par exemple, 1 «commit» peut être associé à 10 suites de tests (et être dissortingbué à une sélection de navigateurs) …

La bonne chose à propos de cette construction est qu’elle est capable de fonctionner de manière tolérante aux pannes. Les clients peuvent aller et venir. À tout moment, il n’y a peut-être pas de Firefox 2 connecté, à un autre moment, il pourrait y en avoir trente. Les travaux sont mis en queue et divisés selon les besoins de la charge. De plus, le client est suffisamment simple pour pouvoir fonctionner sur des appareils mobiles (tout en étant complètement indépendant du framework de test) …

Comme le post référencé dans un article précédent le suggère, vous pouvez utiliser js-test-driver . C’est spécifiquement pour les tests unitaires JavaScript sur plusieurs navigateurs, exactement ce que vous voulez. Je me suis amusé avec ça et c’est plutôt bien. Je n’ai pas fait de tests commerciaux sérieux dans ce domaine.

Pour les tests unitaires, vous devriez regarder les solutions qui ne chargent pas un navigateur pour faire les tests.

Vous pouvez regarder quelque chose comme RhinoUnit pour cela – http://code.google.com/p/rhinounit

Jetez également un coup d’oeil à la structure de test d’unité DOH (Dojo Object Harness) http://dojotoolkit.org/reference-guide/util/doh.html

Regardez une question similaire ici qui peut vous donner une idée sur comment TDD js – Outils de test unitaire JavaScript pour TDD

Il n’est plus activement maintenu, mais je suis toujours satisfait de JSUnit pour les tests unitaires Javascript: https://github.com/pivotal/jsunit

Il inclut à la fois un framework HTML / Javascript que vous pouvez exécuter dans le navigateur et un programme de test basé sur Java que vous pouvez appeler depuis ant.

Pour tester plusieurs navigateurs en parallèle, sélectionnez Selenium Grid. S’il vous plaît jeter un oeil ici: http://selenium-grid.seleniumhq.org/step_by_step_installation_instructions_for_windows.html pour des instructions étape par étape sur la façon de l’utiliser.

Je ne l’ai pas encore utilisé, et il est toujours en version bêta, mais FuncUnit se déclare comme “une suite de tests fonctionnels basée sur qUnit, Selenium et jQuery”.

Il y a aussi une infographie expliquant comment cela fonctionne

Peut-être que c’est quelque chose que tu veux? Le repo github semble être très actif.

Vous devriez vérifier http://saucelabs.com c’est un environnement de selenium de base de nuage qui vous permet de construire votre test et ensuite de les télécharger, de les exécuter dans autant de navigateurs que vous voulez.

Vous devriez considérer les capacités offertes par crossbrowsertesting.com (ce n’est pas gratuit). Pour tester js, essayez JsUnit (http://www.jsunit.net/).

Cité de sa page d’accueil

JsUnit est un framework de test unitaire pour le JavaScript côté client (dans le navigateur). C’est essentiellement un portage de JUnit vers JavaScript. Une plate-forme d’automatisation de l’exécution de tests sur plusieurs navigateurs et plusieurs machines exécutant différents systèmes d’exploitation est également incluse.

Comme les gens l’ont déjà dit, vous devriez utiliser JsTestDriver. Il possède son propre système de test, mais vous pouvez utiliser d’autres bibliothèques de test, par exemple Jasmine ( http://pivotal.github.com/jasminee/ ). Vous pouvez trouver une liste des adaptateurs pour JsTestDriver ici: http://code.google.com/p/js-test-driver/wiki/XUnitCompatibility

J’irais pour QUnit , qui est ce que jQuery utilise. Je l’ai couru sur beaucoup de navigateurs de bureau, ainsi que sur les iPhones et les téléphones Android.

Il existe d’excellents tutoriels et il peut être facilement intégré à des éléments tels que js-test-driver . QUnit est modélisé d’après JUnit et tous les autres frameworks de test xUnit (comme PHPUnit), il est donc facile de choisir l’API.

La syntaxe de base est la suivante:

 test("my first test", function() { var str = "hello"; equals( "hello", str, "Should be hello" ); }); 

Il a aussi l’air très bien:

Capture d'écran de QUnit

Il existe peu de sociétés spécialisées dans les tests inter-navigateurs.

http://browserling.com/

http://www.browserstack.com/

http://saucelabs.com/ (déjà mentionné ici)

http://browsershots.org/

http://www.browsercam.com/

http://browserseal.com/

Utilisez la librairie de test souhaitée.

Le selenium ou SauceLabs, etc. ne sont pas des tests unitaires. Ce sont des solutions de test fonctionnelles / d’intégration.

Vous devez abstraire vos usages externes tels que DOM pour tester le javascript.

Ecrivez vos tests pour qu’ils puissent utiliser n’importe quelle bibliothèque externe telle que jquery par configuration. Ainsi, vous pouvez tester votre logique sans toucher aux externalités et vous pouvez également tester les tests sur plusieurs navigateurs.