[{"data":1,"prerenderedAt":304},["ShallowReactive",2],{"\u002Fv5\u002Fdodock\u002Fcontribuer\u002Fcouverture-de-code":3,"section:\u002Fv5\u002Fdodock\u002Fcontribuer\u002Fcouverture-de-code":303},{"id":4,"title":5,"body":6,"description":290,"extension":291,"meta":292,"navigation":294,"path":299,"seo":300,"stem":301,"__hash__":302},"docs\u002F1.v5\u002F3.dodock\u002F15.contribuer\u002F4.couverture-de-code.md","Configuration avancée de la couverture de code",{"type":7,"value":8,"toc":284},"minimark",[9,13,17,22,77,92,106,110,129,143,152,163,218,235,249,263,267,280],[10,11,5],"h1",{"id":12},"configuration-avancée-de-la-couverture-de-code",[14,15,16],"p",{},"La couverture de code mesure les lignes exécutées par les tests. Elle montre les parties d'une application que les tests ne vérifient pas.",[18,19,21],"h2",{"id":20},"mesurer-la-couverture","Mesurer la couverture",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bench --site \u003Csite-de-test> run-tests --app \u003Cmon_app> --coverage\n","bash","",[30,31,32],"code",{"__ignoreMap":28},[33,34,37,41,45,49,52,56,59,62,65,67,70,72,74],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"sBMFI","bench",[33,42,44],{"class":43},"sfazB"," --site",[33,46,48],{"class":47},"sMK4o"," \u003C",[33,50,51],{"class":43},"site-de-tes",[33,53,55],{"class":54},"sTEyZ","t",[33,57,58],{"class":47},">",[33,60,61],{"class":43}," run-tests",[33,63,64],{"class":43}," --app",[33,66,48],{"class":47},[33,68,69],{"class":43},"mon_ap",[33,71,14],{"class":54},[33,73,58],{"class":47},[33,75,76],{"class":43}," --coverage\n",[14,78,79,80,83,84,87,88,91],{},"La mesure porte sur les fichiers Python du dossier ",[30,81,82],{},"apps\u002F\u003Cmon_app>",". À la fin des tests, Dodock écrit le rapport ",[30,85,86],{},"coverage.xml"," dans le dossier ",[30,89,90],{},"sites\u002F"," du bench.",[14,93,94,97,98,101,102,105],{},[30,95,96],{},"bench run-parallel-tests"," accepte l'option ",[30,99,100],{},"--with-coverage",", ou la variable d'environnement ",[30,103,104],{},"CAPTURE_COVERAGE",".",[18,107,109],{"id":108},"exclusions-standard","Exclusions standard",[14,111,112,113,116,117,120,121,124,125,128],{},"Dodock exclut toujours de la mesure : les fichiers JavaScript, CSS, HTML, Vue et XML, les dossiers ",[30,114,115],{},"test_*",", ",[30,118,119],{},"node_modules"," et ",[30,122,123],{},"patches",", et les fichiers ",[30,126,127],{},"*_dashboard.py"," des types de document.",[14,130,131,132,135,136,120,139,142],{},"Pour l'application ",[30,133,134],{},"frappe",", Dodock exclut aussi les dossiers ",[30,137,138],{},"tests",[30,140,141],{},"commands",", et les fichiers testés par la suite de tests des commandes.",[18,144,146,147],{"id":145},"ajouter-des-exclusions-propres-à-une-application","Ajouter des exclusions propres à une application ",[148,149],"badge",{"type":150,"text":151},"warning","Dokos",[14,153,154,155,158,159,162],{},"Une application peut exclure d'autres fichiers dans la section ",[30,156,157],{},"[tool.coverage.run]"," de son fichier ",[30,160,161],{},"pyproject.toml",". Dodock ajoute ces motifs aux exclusions standard : il ne les remplace pas.",[23,164,169],{"className":165,"code":166,"filename":167,"language":168,"meta":28,"style":28},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[tool.coverage.run]\nomit = [\n    # Les tests ne sont pas du code de production\n    \"*\u002Ftests\u002F*\",\n    \"*\u002Fdoctype\u002F*\u002Ftest_*.py\",\n    # Code ancien, remplacé par le module facturation\n    \"mon_app\u002Futils\u002Flegacy_code.py\",\n]\n","mon_app\u002Fpyproject.toml","toml",[30,170,171,176,182,188,194,200,206,212],{"__ignoreMap":28},[33,172,173],{"class":35,"line":36},[33,174,175],{},"[tool.coverage.run]\n",[33,177,179],{"class":35,"line":178},2,[33,180,181],{},"omit = [\n",[33,183,185],{"class":35,"line":184},3,[33,186,187],{},"    # Les tests ne sont pas du code de production\n",[33,189,191],{"class":35,"line":190},4,[33,192,193],{},"    \"*\u002Ftests\u002F*\",\n",[33,195,197],{"class":35,"line":196},5,[33,198,199],{},"    \"*\u002Fdoctype\u002F*\u002Ftest_*.py\",\n",[33,201,203],{"class":35,"line":202},6,[33,204,205],{},"    # Code ancien, remplacé par le module facturation\n",[33,207,209],{"class":35,"line":208},7,[33,210,211],{},"    \"mon_app\u002Futils\u002Flegacy_code.py\",\n",[33,213,215],{"class":35,"line":214},8,[33,216,217],{},"]\n",[14,219,220,221,116,224,227,228,231,232,105],{},"Un motif qui ne commence pas par ",[30,222,223],{},"*",[30,225,226],{},"?"," ou ",[30,229,230],{},"\u002F"," est relatif au dossier de l'application. Dodock le complète avec le chemin ",[30,233,234],{},"apps\u002F\u003Cmon_app>\u002F",[14,236,237,238,241,242,245,246,248],{},"Les autres réglages de la section ",[30,239,240],{},"[tool.coverage]"," (par exemple ",[30,243,244],{},"[tool.coverage.report]",") s'appliquent aussi. Sans section ",[30,247,240],{},", seules les exclusions standard s'appliquent.",[250,251,254],"callout",{"color":252,"icon":253},"blue","i-mdi-information",[14,255,256,257,260,261,105],{},"Un fichier ",[30,258,259],{},".coveragerc"," dans le dossier de l'application n'est pas lu. Utilisez le fichier ",[30,262,161],{},[18,264,266],{"id":265},"bonnes-pratiques","Bonnes pratiques",[268,269,270,274,277],"ul",{},[271,272,273],"li",{},"Excluez seulement le code qui ne doit pas être testé : tests, code généré, code ancien en cours de retrait.",[271,275,276],{},"Ajoutez un commentaire qui explique chaque exclusion.",[271,278,279],{},"Relisez les exclusions de temps en temps et retirez celles qui ne servent plus.",[281,282,283],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":36,"depth":178,"links":285},[286,287,288,289],{"id":20,"depth":178,"text":21},{"id":108,"depth":178,"text":109},{"id":145,"depth":178,"text":146},{"id":265,"depth":178,"text":266},"Exclure des fichiers de la mesure de couverture des tests d'une application, avec la section [tool.coverage] de son pyproject.toml.","md",{"icon":293,"reviewed":294,"last_verified":295,"sources":296},"i-mdi-source-branch-check",true,"2026-11-03",[297,298],"dodock@v5:frappe\u002Fcoverage.py","dodock@v5:frappe\u002Fcommands\u002Ftesting.py","\u002Fv5\u002Fdodock\u002Fcontribuer\u002Fcouverture-de-code",{"title":5,"description":290},"1.v5\u002F3.dodock\u002F15.contribuer\u002F4.couverture-de-code","xsgSi0-DMhUV5Tg78JJ1w24E_m3QzuMQtkAcEuMvJRg",{},1794736580186]