5

J'ai écrit des tests unitaires dans des langues fortement typées et j'ai une assez bonne compréhension à ce sujet. Lorsque j'écris des tests unitaires en JavaScript pour vérifier si certaines fonctions fonctionnent correctement dans certains navigateurs, je suis de retour au test manuel. Je n'ai aucune compréhension de la façon dont cela fonctionne. Parce que JavaScript est censé combler le fossé entre les données et la présentation et le rendre plus interactif. Et tout se passe dans les navigateurs et c'est plus à voir avec l'interface utilisateur. donc je suppose que si je devais écrire un test unitaire j'écrire quelque chose comme (dans le code pseudo):Concepts/pratiques de tests unitaires généraux en JavaScript contre différents navigateurs?

run function A 
check DOM if certain element has been created 
    if not then fail 
check if element is visible 
    if not then fail 
check for the content of that element 
    if null then fail 
etc… 

La rédaction de ces essais semblent comme « coder en dur » pour moi et ce qui manque est que la les tests ne seraient pas capables de dire si le rendu a été correctement effectué, mais seulement les tests fonctionnels purs. Je me demande donc si quelqu'un peut m'expliquer quelles sont les bonnes procédures de test en JavaScript, comment construire des automatisations et quelques concepts généraux pour le faire. Je regardais juste John Resig's project testswarm mais je ne sais pas encore de quoi il s'agit. Je suis également en train de lire sur QUnit pour le moment.

Je suis à la recherche de documents d'introduction sur les concepts/pratiques que j'ai pu commencer. Je ne recherche pas de bibliothèques ou d'outils spécifiques à moins d'avoir une bonne introduction sur les concepts.

Merci.

Répondre

4

C'est certainement une zone confuse et dynamique de développement web en ce moment. Dans mon esprit, il y a quelques distinctions de caractéristiques importantes du test JS:

  • tests unitaires purs, qui testent le code Javascript. Vous pouvez affirmer que a+b=3, ou autre. Nous avons eu seulement quelques problèmes qui correspondent à cette catégorie. Lorsque les options de discussion, il existe de nombreuses alternatives à JSUnit (un port JUnit). Ils se décomposent en TDD vs. BDD et les choix de dénomination dans ces catégories.
  • Javascript + tests DOM. Une grande partie du code écrit ces jours-ci concerne la manipulation du DOM. par exemple. assertEqual('<a><div /></a>', $('div').wrap('a')); Pour les tests JS basés sur DOM, vous devez soit passer à des tests dans le navigateur, soit utiliser une bibliothèque comme env.js.
  • Il moquez également & stubbing (fumée), les aides async et autres

Il y a deux endroits tests peuvent exécuter:

  • hors navigateur test (généralement plus rapide à exécuter, si ils peuvent être utilisés dans un environnement TDD)
  • test dans le navigateur (plus lent, plus compliqué, mais fournissent des résultats des tests multi-navigateur plus précis)

Selenium s'exécute dans le navigateur, donc c'est génial pour les tests d'intégration. Si vous n'avez rien d'autre à faire, c'est un bon point de départ. Il existe depuis quelques années et supporte les navigateurs les plus populaires et les langues. Regarder a screencast like this peut être utile. Et this documentation pourrait vous donner une idée de ce à quoi les tests ressembleraient. Il y a aussi quelques autres tutoriels et screencasts autour, mais beaucoup d'entre eux s'enlisent dans le doodoo technique qui ne vous intéresse pas, donc vous devez être sélectif.

Enfin, voici un exemple de blue ridge, qui est une collection d'outils ressaisit pour des contrôles hors-navigateur (et test manuel dans le navigateur) pour Rails:

Screw.Unit(function() { 
    describe("Your application javascript", function() { 
     it("accesses the DOM from fixtures/application.html", function() { 
      expect($$('.select_me').length).to(equal, 2); 
     }); 
    }); 
}); 

Ceci est un seul test en utilisant un test de test de syntaxe semblable à rspec que quelques éléments sont là. J'espère que cela t'aides!

0

J'entends parfois environ Selenium. Je ne l'ai jamais utilisé mais peut-être que ça pourrait t'aider.

Sélénium Remote Control (RC) exécute vos des tests dans plusieurs navigateurs et plates-formes . Tweak vos tests dans votre langue préférée .

J'ai aussi trouvé un article de blog: Unit Testing in JavaScript, qui mentionne ceci: Looking for a better JavaScript unit test tool.

+0

Merci mais je ne cherche pas de frameworks spécifiques ce que je cherche à comprendre les concepts de faire du test unitaire en javascript, notamment par rapport aux différents navigateurs. – Jeff

+0

Vous ne saurez jamais ce qui vous convient jusqu'à ce que vous essayiez quelques outils différents. D'après ce que je comprends, de ceux qui testent, tout le monde a son moyen de tester, en fonction de comment JS s'inscrit dans la solution globale. – montrealist

0

Vous pouvez essayer d'utiliser Test Swarm

+0

Cela est actuellement encore en alpha et est seulement ouvert aux projets open source, il ressemble. – nickf

1

Vous voudrez peut-être envisager d'utiliser le modèle de présentateur pour votre JavaScript et juste en utilisant des tests unitaires simples. Le blog Google Testing a quelques ressources décentes.

Je commence ici:

http://googletesting.blogspot.com/2009/02/with-all-sport-drug-scandals-of-late.html

Je l'ai fait dans des projets Flex (ActionScript) pour tout mon code de l'interface utilisateur et a trouvé qu'il a très bien fonctionné. Vous souhaitez isoler votre fonctionnalité afin d'éviter de tester des éléments déjà largement testés par les fournisseurs de navigateurs.

+0

Vérifiez également ce lien que j'ai trouvé dans les commentaires de l'article lié: http://www.atomicobject.com/pages/Presenter+First – camwest

2

Vérifiez jsTestDriver. Je pense que c'est l'un des meilleurs:

L'objectif de JsTestDriver est de construire un lanceur de test JavaScript qui:

intègre facilement avec builds continu systèmes et permet l'exécution tests sur plusieurs navigateurs rapidement facilité le développement de style TDD.

http://code.google.com/p/js-test-driver/

+0

Je lis l'intro maintenant pour avoir une idée. – Jeff