{"title":"Code JavaScript","version":"5.2","locale":"fr","docname":"internals/contributing/writing-code/javascript","url":"/fr/5.2/internals/contributing/writing-code/javascript/","canonical":"https://djangodocs.dev/fr/5.2/internals/contributing/writing-code/javascript/","summary":"Même si la majorité du code Django est en Python, les applications contribuées admin et gis contiennent du code JavaScript. Veuillez respecter ces standards de…","html":"<h1>Code JavaScript<a class=\"heading-anchor\" href=\"#javascript-code\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Même si la majorité du code Django est en Python, les applications contribuées <code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">gis</span></code> contiennent du code JavaScript.</p>\n<p>Veuillez respecter ces standards de codage lorsque vous écrivez du code JavaScript destiné à faire partie de Django.</p>\n<section id=\"code-style\">\n<h2>Style de code<a class=\"heading-anchor\" href=\"#code-style\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul class=\"simple\">\n<li><p>Veuillez respecter le style d’indentation défini dans le fichier <code class=\"docutils literal notranslate\"><span class=\"pre\">.editorconfig</span></code>. Nous recommandons d’utiliser un éditeur de texte avec prise en charge de <a class=\"reference external\" href=\"https://editorconfig.org/\">EditorConfig</a> pour éviter des problèmes d’indentation et d’espace. La plupart des fichiers JavaScript utilisent 4 espaces pour l’indentation, mais il y a quelques exceptions.</p></li>\n<li><p>Lors du nommage des variables, utilisez la notation <code class=\"docutils literal notranslate\"><span class=\"pre\">camelCase</span></code> plutôt que la <code class=\"docutils literal notranslate\"><span class=\"pre\">séparation_par_soulignement</span></code>. Il peut arriver que certains fichiers JavaScript utilisent un style de code différent. Merci de vous conformer au style de code de chaque fichier.</p></li>\n<li><p>Utilisez le vérificateur de code <a class=\"reference external\" href=\"https://eslint.org/\">ESLint</a> pour contrôler si votre code contient des bogues ou des erreurs de style. ESLint est lancé en même temps que les tests JavaScript. Nous recommandons également d’installer un greffon ESLint dans votre éditeur de texte.</p></li>\n<li><p>Lorsque c’est possible, écrivez du code qui fonctionnera même si la structure de la page est modifiée plus tard par du JavaScript. Par exemple, lors de l’inscription d’une fonction de clic, écrivez <code class=\"docutils literal notranslate\"><span class=\"pre\">$('body').on('click',</span> <span class=\"pre\">sélecteur,</span> <span class=\"pre\">fonction)</span></code> plutôt que <code class=\"docutils literal notranslate\"><span class=\"pre\">$(sélecteur).click(fonction)</span></code>. Cela simplifie l’extension du comportement par défaut de Django avec JavaScript par d’autres projets.</p></li>\n</ul>\n</section>\n<section id=\"javascript-patches\">\n<span id=\"id1\"></span><h2>Correctifs JavaScript<a class=\"heading-anchor\" href=\"#javascript-patches\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Le système d’administration de Django exploite la bibliothèque jQuery pour augmenter les capacités de l’interface d’administration. En parallèle, un accent est mis sur les performances du code JavaScript de l’administration et sur la réduction de la taille globale des fichiers statiques de l’administration.</p>\n</section>\n<section id=\"javascript-tests\">\n<span id=\"id2\"></span><h2>Tests JavaScript<a class=\"heading-anchor\" href=\"#javascript-tests\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les tests JavaScript de Django peuvent être lancés dans un navigateur ou à partir de la ligne de commande. Les tests sont situés dans un répertoire <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.2.x/js_tests\">js_tests</a> au premier niveau.</p>\n<section id=\"writing-tests\">\n<h3>Écriture de tests<a class=\"heading-anchor\" href=\"#writing-tests\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les tests JavaScript de Django utilisent <a class=\"reference external\" href=\"https://qunitjs.com/\">QUnit</a>. Voici un exemple de module de test :</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"JavaScript code\"><code><span class=\"nx\">QUnit</span><span class=\"p\">.</span><span class=\"nx\">module</span><span class=\"p\">(</span><span class=\"s1\">&#39;magicTricks&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"nx\">beforeEach</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"kd\">function</span><span class=\"p\">()</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"kd\">const</span><span class=\"w\"> </span><span class=\"nx\">$</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"nx\">django</span><span class=\"p\">.</span><span class=\"nx\">jQuery</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"nx\">$</span><span class=\"p\">(</span><span class=\"s1\">&#39;#qunit-fixture&#39;</span><span class=\"p\">).</span><span class=\"nx\">append</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;button class=&quot;button&quot;&gt;&lt;/button&gt;&#39;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">});</span>\n\n<span class=\"nx\">QUnit</span><span class=\"p\">.</span><span class=\"nx\">test</span><span class=\"p\">(</span><span class=\"s1\">&#39;removeOnClick removes button on click&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kd\">function</span><span class=\"p\">(</span><span class=\"nx\">assert</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kd\">const</span><span class=\"w\"> </span><span class=\"nx\">$</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"nx\">django</span><span class=\"p\">.</span><span class=\"nx\">jQuery</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"nx\">removeOnClick</span><span class=\"p\">(</span><span class=\"s1\">&#39;.button&#39;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"nx\">assert</span><span class=\"p\">.</span><span class=\"nx\">equal</span><span class=\"p\">(</span><span class=\"nx\">$</span><span class=\"p\">(</span><span class=\"s1\">&#39;.button&#39;</span><span class=\"p\">).</span><span class=\"nx\">length</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mf\">1</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"nx\">$</span><span class=\"p\">(</span><span class=\"s1\">&#39;.button&#39;</span><span class=\"p\">).</span><span class=\"nx\">click</span><span class=\"p\">();</span>\n<span class=\"w\">    </span><span class=\"nx\">assert</span><span class=\"p\">.</span><span class=\"nx\">equal</span><span class=\"p\">(</span><span class=\"nx\">$</span><span class=\"p\">(</span><span class=\"s1\">&#39;.button&#39;</span><span class=\"p\">).</span><span class=\"nx\">length</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mf\">0</span><span class=\"p\">);</span>\n<span class=\"p\">});</span>\n\n<span class=\"nx\">QUnit</span><span class=\"p\">.</span><span class=\"nx\">test</span><span class=\"p\">(</span><span class=\"s1\">&#39;copyOnClick adds button on click&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kd\">function</span><span class=\"p\">(</span><span class=\"nx\">assert</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kd\">const</span><span class=\"w\"> </span><span class=\"nx\">$</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"nx\">django</span><span class=\"p\">.</span><span class=\"nx\">jQuery</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"nx\">copyOnClick</span><span class=\"p\">(</span><span class=\"s1\">&#39;.button&#39;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"nx\">assert</span><span class=\"p\">.</span><span class=\"nx\">equal</span><span class=\"p\">(</span><span class=\"nx\">$</span><span class=\"p\">(</span><span class=\"s1\">&#39;.button&#39;</span><span class=\"p\">).</span><span class=\"nx\">length</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mf\">1</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"nx\">$</span><span class=\"p\">(</span><span class=\"s1\">&#39;.button&#39;</span><span class=\"p\">).</span><span class=\"nx\">click</span><span class=\"p\">();</span>\n<span class=\"w\">    </span><span class=\"nx\">assert</span><span class=\"p\">.</span><span class=\"nx\">equal</span><span class=\"p\">(</span><span class=\"nx\">$</span><span class=\"p\">(</span><span class=\"s1\">&#39;.button&#39;</span><span class=\"p\">).</span><span class=\"nx\">length</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mf\">2</span><span class=\"p\">);</span>\n<span class=\"p\">});</span>\n</code></pre></div>\n<p>Consultez la documentation de <code class=\"docutils literal notranslate\"><span class=\"pre\">QUnit</span></code> pour des informations sur les types d”<a class=\"reference external\" href=\"https://api.qunitjs.com/assert/\">assertions prises en charge par QUnit</a>.</p>\n</section>\n<section id=\"running-tests\">\n<h3>Lancement des tests<a class=\"heading-anchor\" href=\"#running-tests\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les tests JavaScript peuvent être lancés à partir d’un navigateur Web ou de la ligne de commande.</p>\n<section id=\"testing-from-a-web-browser\">\n<h4>Tests à partir d’un navigateur Web<a class=\"heading-anchor\" href=\"#testing-from-a-web-browser\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Pour lancer les tests à partir d’un navigateur Web, ouvrez <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.2.x/js_tests/tests.html\">js_tests/tests.html</a> dans votre navigateur.</p>\n<p>Pour mesure la couverture de code lors de l’exécution des tests, vous devez afficher ce fichier par HTTP. Pour voir la couverture de code :</p>\n<ul class=\"simple\">\n<li><p>Exécutez <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">-m</span> <span class=\"pre\">http.server</span></code> à partir du répertoire racine (pas depuis le répertoire <code class=\"docutils literal notranslate\"><span class=\"pre\">js_tests</span></code>).</p></li>\n<li><p>Ouvrez <a class=\"reference external\" href=\"http://localhost:8000/js_tests/tests.html\">http://localhost:8000/js_tests/tests.html</a> dans votre navigateur Web.</p></li>\n</ul>\n</section>\n<section id=\"testing-from-the-command-line\">\n<h4>Tests à partir de la ligne de commande<a class=\"heading-anchor\" href=\"#testing-from-the-command-line\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Pour lancer les tests à partir de la ligne de commande, il est nécessaire que <a class=\"reference external\" href=\"https://nodejs.org/\">Node.js</a> soit installé.</p>\n<p>Après l’installation de <code class=\"docutils literal notranslate\"><span class=\"pre\">Node.js</span></code>, installez les dépendances de tests JavaScript en exécutant ce qui suit à partir de la racine du dépôt Django :</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>npm<span class=\"w\"> </span>install\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> npm install\n</code></pre></div></div></div>\n<p>Puis, lancez les tests avec :</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>npm<span class=\"w\"> </span><span class=\"nb\">test</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> npm test\n</code></pre></div></div></div>\n</section>\n</section>\n</section>","rootId":"javascript-code","toc":[{"title":"Style de code","anchor":"code-style","children":[]},{"title":"Correctifs JavaScript","anchor":"javascript-patches","children":[]},{"title":"Tests JavaScript","anchor":"javascript-tests","children":[{"title":"Écriture de tests","anchor":"writing-tests","children":[]},{"title":"Lancement des tests","anchor":"running-tests","children":[{"title":"Tests à partir d’un navigateur Web","anchor":"testing-from-a-web-browser","children":[]},{"title":"Tests à partir de la ligne de commande","anchor":"testing-from-the-command-line","children":[]}]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Fonctionnement interne du projet Django","url":"/fr/5.2/internals/"},{"docname":"internals/contributing/index","title":"Contribuer à Django","url":"/fr/5.2/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Contribution au code","url":"/fr/5.2/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/coding-style","title":"Style de code","url":"/fr/5.2/internals/contributing/writing-code/coding-style/"},"next":{"docname":"internals/contributing/accessibility","title":"Accessibility","url":"/fr/5.2/internals/contributing/accessibility/"},"formats":{"html":"/fr/5.2/internals/contributing/writing-code/javascript/","markdown":"/fr/5.2/internals/contributing/writing-code/javascript.md","json":"/fr/5.2/internals/contributing/writing-code/javascript.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/internals/contributing/writing-code/javascript.txt","official":"https://docs.djangoproject.com/fr/5.2/internals/contributing/writing-code/javascript/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}