utiliser mocha-phantomjs pour automatiser les tests fonctionnels

Mon projet utilise: Node, Coffeescript, SocketIO, Browserify et Mocha. (mocha pour les tests unitaires standard côté serveur)

J’aimerais automatiser certains tests d’interface côté client à l’aide d’un navigateur sans navigateur. PhantomJS semblait être le choix idéal (choisi sur Zombie en raison de la prise en charge des sockets Web).

Les pages PhantomJS avertissent que ce n’est pas un coureur de test, ce que je comprends, et ils recommandent d’utiliser le projet mocha-phantomjs pour conduire vos tests.

J’ai donc pu exécuter les exemples de tests (par exemple, mocha-phantomjs tests/mixed.html ), mais mon problème actuel est d’utiliser PHANTOM dans les tests. Tous les exemples de tests du référentiel mocha-phantomjs semblent utiliser le test unitaire standard mocha côté serveur.

Par exemple, je peux facilement exécuter mocha-phantomjs tests/mixed.html pour voir les anciens tests unitaires ennuyeux. Ou je peux exécuter phantomjs tests/login.coffee pour charger mon écran de connexion … mais comment puis-je combiner les deux pour faire des assertions sur ce que je devrais m’attendre à voir sur mon écran de connexion?

Je ne trouve aucun exemple de cela sur le Web, et j’ai du mal à comprendre la meilleure façon de procéder.

J’espère que tout cela a du sens. Merci d’avance pour toute aide.

UPDATE : J’ai trouvé la suggestion suivante de l’auteur ( ici ), mais je ne comprends pas vraiment quoi en faire: phantomjs lib/mocha-phantomjs.coffee test/mixed.html

Il y a un assez bon tutoriel pour tester avec Mocha et Phantom.JS ici .

La section sur Mocha et PhantomJS est courte, mais l’idée de base est de mettre des assertions et interactions DOM dans votre suite de tests Mocha, de l’exécuter côté client via un fichier testrunner.html, puis de pointer mocha-phantomjs sur le testrunner. fichier html.

Pour paraphraser votre test Mocha pourrait ressembler à ceci:

 describe("DOM Test", function () { var el = document.createElement("div"); el.id = "myDiv"; el.innerHTML = "Hello World!"; document.body.appendChild(el); var myEl = document.getElementById('myDiv'); it("has the right text", function () { (myEl.innerHTML).should.equal("Hello World!"); }); }); 

Et le fichier testrunner.html serait la configuration normale:

    Tests     

Si vous préférez une solution entièrement exécutée à partir de l’écosystème node.js, il est utile de prendre en compte Zombie.JS . Cette question de débordement de stack fournit un exemple de base.

Le compromis est que, bien que Zombie.JS puisse être utilisé simplement en exigeant le module de nœud, et qu’il soit extrêmement rapide, ce n’est pas un “vrai” navigateur Web. PhantomJS est plus proche, car basé sur webkit. En outre, la première approche avec mocha-phantomjs vous permettrait d’exécuter les tests Mocha côté client dans différents navigateurs de votre choix, PhantomJS n’en étant qu’un d’eux.