{"id":607,"date":"2012-10-09T21:48:54","date_gmt":"2012-10-09T20:48:54","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=607"},"modified":"2012-11-19T15:21:48","modified_gmt":"2012-11-19T14:21:48","slug":"test-js-avec-mocha-et-chai","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=607","title":{"rendered":"Test Js avec Mocha et Chai"},"content":{"rendered":"<p><a href=\"http:\/\/www.unicoda.com\/wp-content\/uploads\/2012\/10\/mocha_nyan_config.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-610\" title=\"Mocha\" src=\"http:\/\/www.unicoda.com\/wp-content\/uploads\/2012\/10\/mocha_nyan_config.png\" alt=\"\" width=\"553\" height=\"140\" srcset=\"https:\/\/www.unicoda.com\/wp-content\/uploads\/2012\/10\/mocha_nyan_config.png 553w, https:\/\/www.unicoda.com\/wp-content\/uploads\/2012\/10\/mocha_nyan_config-300x75.png 300w, https:\/\/www.unicoda.com\/wp-content\/uploads\/2012\/10\/mocha_nyan_config-500x126.png 500w\" sizes=\"auto, (max-width: 553px) 85vw, 553px\" \/><\/a>Deux outils bien utiles pour r\u00e9aliser des fichiers de tests. Mocha est framework de test \u00e9crit en Javascript et une biblioth\u00e8que d&rsquo;assertion pour Node<\/p>\n<p>Avec <a href=\"http:\/\/visionmedia.github.com\/mocha\/\">Mocha<\/a>, on peut facilement d\u00e9crire sa situation de test puis v\u00e9rifier l&rsquo;\u00e9tat des diff\u00e9rents tests li\u00e9s \u00e0 celle-ci.<br \/>\nPlusieurs dispositions sont disponibles pour l&rsquo;affichage des r\u00e9sultats des tests. Pour ma part, j&rsquo;utilise le reporter \u00ab\u00a0spec\u00a0\u00bb.<br \/>\nIl est \u00e9galement possible de pr\u00e9parer l&rsquo;environnement de test en utilisant before ou after par exemple, pour effectuer des actions avant les situations de test.<\/p>\n<p><a href=\"http:\/\/chaijs.com\/\">Chai<\/a> nous permet quant \u00e0 lui de v\u00e9rifier et comparer la valeur de variables ou de propri\u00e9t\u00e9s avec la valeur attendue dans le cas d&rsquo;un fonctionnement \u00ab\u00a0normal\u00a0\u00bb.<br \/>\nDiff\u00e9rentes possibilit\u00e9s d&rsquo;\u00e9criture, le style assert ou le style BDD d\u00e9clin\u00e9 en deux colorations: expect et should.<\/p>\n<p>Pour l&rsquo;utilisation d&rsquo;assert: var assert = require(&lsquo;chai&rsquo;).assert;<\/p>\n<p>Un petit exemple de test combinant Mocha et Chai.<\/p>\n<pre>var assert = require('chai').assert,\r\nquestion = undefined,\r\nanswer = 42;\r\n\r\ndescribe('Question of Life and the Universe', function() {\r\n  it('answer to this undefined question should be 42', function(done) {\r\n    assert.isUndefined(question, 'Answer is 42, but what is the question');\r\n    assert.equal(answer, 42);\r\n    done();\r\n  });\r\n});<\/pre>\n<p>Sur cette exemple, il est possible d&rsquo;encha\u00eener les <em>it<\/em> dans un m\u00eame <em>describe<\/em> et les describe dans un fichier de test.<br \/>\nNotons qu&rsquo;il est \u00e9galement possible de faire un describe dans un describe.<\/p>\n<p>Chaque test poss\u00e8de un temps max pour \u00eatre r\u00e9alis\u00e9, par d\u00e9faut 200ms il me semble.<br \/>\nIl est possible de modifier ce temps de timeout \u00e0 l&rsquo;appel de la commande mocha via le param\u00e8tre d\u00e9di\u00e9.<br \/>\nSinon, on peut sp\u00e9cifier le timeout pour chaque it gr\u00e2ce \u00e0 this.timeout(tpsEnMs); .<\/p>\n<p>Autre point int\u00e9ressant, la pr\u00e9sence de done comme param\u00e8tre de function au niveau du it change la caract\u00e8re synchrone ou asynchrone de votre test.<br \/>\nAvec done, mocha ne passe au it suivant que lorsque le it en cours \u00e0 renvoy\u00e9 done.<br \/>\nInversement, omettre done pour un it permet donc \u00e0 mocha de continuer automatiquement sur le test suivant.<\/p>\n<p>Pour conclure, le duo Mocha\/Chai permet d&rsquo;avoir des fichiers de test avec une hi\u00e9rarchie lisible. Le fonctionnement et la syntaxe viennent rapidement.<br \/>\nEnfin, avoir transform\u00e9 une batterie de test \u00e9crit en vows en tests utilisant Mocha et Chai, m&rsquo;a montr\u00e9 qu&rsquo;utiliser le duo que je viens de pr\u00e9senter simplifie beaucoup les choses.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Deux outils bien utiles pour r\u00e9aliser des fichiers de tests. Mocha est framework de test \u00e9crit en Javascript et une biblioth\u00e8que d&rsquo;assertion pour Node Avec Mocha, on peut facilement d\u00e9crire sa situation de test puis v\u00e9rifier l&rsquo;\u00e9tat des diff\u00e9rents tests li\u00e9s \u00e0 celle-ci. Plusieurs dispositions sont disponibles pour l&rsquo;affichage des r\u00e9sultats des tests. Pour ma &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=607\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Test Js avec Mocha et Chai&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40],"tags":[21,13,20],"class_list":["post-607","post","type-post","status-publish","format-standard","hentry","category-info","tag-chai","tag-javascript","tag-mocha"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=607"}],"version-history":[{"count":7,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/607\/revisions"}],"predecessor-version":[{"id":894,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/607\/revisions\/894"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=607"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=607"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}