[{"data":1,"prerenderedAt":1732},["ShallowReactive",2],{"post-\u002Ffr\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests":3,"post-link-fr-f3e97a6a-ce47-42b8-8493-06eb37f8e964":1273},{"id":4,"title":5,"body":6,"contentId":1257,"date":1258,"description":1259,"extension":1260,"meta":1261,"navigation":216,"path":1262,"rawbody":1263,"robots":1264,"schemaOrg":1264,"seo":1265,"sitemap":1266,"stem":1271,"__hash__":1272},"posts\u002Ffr\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests.md","Tester est Plus Vastes que la Simple Écriture de Tests",{"type":7,"value":8,"toc":1254},"minimark",[9,20,23,26,115,123,126,131,134,141,165,692,699,964,970,976,985,988,1000,1007,1010,1026,1032,1042,1048,1054,1057,1064,1075,1078,1081,1084,1250],[10,11,12],"blockquote",{},[13,14,15,19],"p",{},[16,17,18],"span",{},"!NOTE","\nJe ne suis pas un expert en tests. Je partage simplement mes réflexions sur les tests en tant que développeur, dans un article que j'aurais apprécié lorsque j'ai commencé à coder.",[13,21,22],{},"J'ai commencé à coder il y a six ans. Depuis, j'ai entendu beaucoup parler des tests, mais j'ai vu peu d'exemples réels et pratiques.",[13,24,25],{},"Dans de nombreux articles que j'ai lus, les tests ressemblent à ça :",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","it('should return 2 when 1 + 1', () => {\n  expect(1 + 1).toBe(2)\n})\n","js","",[34,35,36,71,107],"code",{"__ignoreMap":32},[16,37,40,44,48,52,56,58,61,64,68],{"class":38,"line":39},"line",1,[16,41,43],{"class":42},"s2Zo4","it",[16,45,47],{"class":46},"sTEyZ","(",[16,49,51],{"class":50},"sMK4o","'",[16,53,55],{"class":54},"sfazB","should return 2 when 1 + 1",[16,57,51],{"class":50},[16,59,60],{"class":50},",",[16,62,63],{"class":50}," ()",[16,65,67],{"class":66},"spNyl"," =>",[16,69,70],{"class":50}," {\n",[16,72,74,77,80,84,87,90,93,96,99,101,104],{"class":38,"line":73},2,[16,75,76],{"class":42},"  expect",[16,78,47],{"class":79},"swJcz",[16,81,83],{"class":82},"sbssI","1",[16,85,86],{"class":50}," +",[16,88,89],{"class":82}," 1",[16,91,92],{"class":79},")",[16,94,95],{"class":50},".",[16,97,98],{"class":42},"toBe",[16,100,47],{"class":79},[16,102,103],{"class":82},"2",[16,105,106],{"class":79},")\n",[16,108,110,113],{"class":38,"line":109},3,[16,111,112],{"class":50},"}",[16,114,106],{"class":46},[13,116,117,118,122],{},"C'est ",[119,120,121],"strong",{},"loin des scénarios du monde réel"," et cela n'aide pas à comprendre la véritable valeur des tests.",[13,124,125],{},"Je dois admettre que, quand je ne comprends pas quelque chose, j'évite de l'utiliser. Néanmoins, depuis ma première rencontre avec le concept de tests, cela a persisté dans mon esprit, me poussant à rassembler des connaissances à ce sujet.",[127,128,130],"h2",{"id":129},"un-long-voyage","Un Long Voyage",[13,132,133],{},"J'ai d'abord entendu parler des tests lorsque j'ai appris Vue 2 en 2019. Dans la section des outils, sous la page \"Single File Component\", j'ai trouvé une section dédiée aux \"Tests\".",[13,135,136,137],{},"Je pense que j'ai lu le début de la page mais je n'ai jamais été plus loin. Il y avait trop de nouveaux concepts à saisir, trop d'outils à apprendre, et trop de choix à faire. ",[138,139,140],"em",{},"À ce moment-là, j'ai compris que les tests front-end sont de loin la partie la plus difficile des tests.",[13,142,143,144,151,152,157,158,161,162],{},"En 2020, avec quelques amis, nous avons développé une plateforme de tutorat. Le serveur API a été construit avec ",[145,146,150],"a",{"href":147,"rel":148},"https:\u002F\u002Fcrow.docs.feathersjs.com\u002F",[149],"nofollow","Feathers.js 4",". À ce moment-là, j'avais encore du mal avec les tests. Je me souviens avoir cherché ",[145,153,156],{"href":154,"rel":155},"https:\u002F\u002Fcrow.docs.feathersjs.com\u002Fguides\u002Fbasics\u002Ftesting.html#writing-tests",[149],"la page des tests dans la documentation de Feathers.js"," et même l'avoir lue. Malgré le fait de ne pas bien la comprendre, j'ai écrit de nombreux tests. C'était une vraie lutte, car la distinction entre les tests unitaires et les tests d'intégration m'était floue, et les exécuter dans un CI était très difficile. ",[138,159,160],{},"J'utilisais MongoDB et Azure CI. En y repensant, je pense que je voulais souffrir."," Je me souviens aussi avoir essayé d'atteindre 100 % de couverture. ",[138,163,164],{},"J'étais tellement naïf.",[27,166,170],{"className":167,"code":168,"language":169,"meta":32,"style":32},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","it('should patch', async () => {\n  expect.assertions(5)\n\n  const patchedResult: Department = await app\n    .service(serviceName)\n    .patch(result._id, anotherDepartment)\n\n  expect(patchedResult).toBeDefined()\n  expect(patchedResult).toHaveProperty('_id')\n  expect(patchedResult).toHaveProperty(\n    'name',\n    anotherDepartment.name.toLowerCase()\n  )\n  expect(patchedResult).toHaveProperty('createdAt')\n  expect(patchedResult).toHaveProperty('updatedAt')\n})\n\nit('should delete', async () => {\n  expect.assertions(5)\n\n  const deleteResult: Department = await app\n    .service(serviceName)\n    .remove(result._id)\n\n  expect(deleteResult).toBeDefined()\n  expect(deleteResult).toHaveProperty('_id')\n  expect(deleteResult).toHaveProperty('name', result.name.toLowerCase())\n  expect(deleteResult).toHaveProperty('createdAt')\n  expect(deleteResult).toHaveProperty('updatedAt')\n})\n","ts",[34,171,172,196,212,218,244,260,285,290,310,336,354,368,385,391,417,443,450,455,479,494,499,517,530,548,553,571,596,635,660,685],{"__ignoreMap":32},[16,173,174,176,178,180,183,185,187,190,192,194],{"class":38,"line":39},[16,175,43],{"class":42},[16,177,47],{"class":46},[16,179,51],{"class":50},[16,181,182],{"class":54},"should patch",[16,184,51],{"class":50},[16,186,60],{"class":50},[16,188,189],{"class":66}," async",[16,191,63],{"class":50},[16,193,67],{"class":66},[16,195,70],{"class":50},[16,197,198,200,202,205,207,210],{"class":38,"line":73},[16,199,76],{"class":46},[16,201,95],{"class":50},[16,203,204],{"class":42},"assertions",[16,206,47],{"class":79},[16,208,209],{"class":82},"5",[16,211,106],{"class":79},[16,213,214],{"class":38,"line":109},[16,215,217],{"emptyLinePlaceholder":216},true,"\n",[16,219,221,224,227,230,234,237,241],{"class":38,"line":220},4,[16,222,223],{"class":66},"  const",[16,225,226],{"class":46}," patchedResult",[16,228,229],{"class":50},":",[16,231,233],{"class":232},"sBMFI"," Department",[16,235,236],{"class":50}," =",[16,238,240],{"class":239},"s7zQu"," await",[16,242,243],{"class":46}," app\n",[16,245,247,250,253,255,258],{"class":38,"line":246},5,[16,248,249],{"class":50},"    .",[16,251,252],{"class":42},"service",[16,254,47],{"class":79},[16,256,257],{"class":46},"serviceName",[16,259,106],{"class":79},[16,261,263,265,268,270,273,275,278,280,283],{"class":38,"line":262},6,[16,264,249],{"class":50},[16,266,267],{"class":42},"patch",[16,269,47],{"class":79},[16,271,272],{"class":46},"result",[16,274,95],{"class":50},[16,276,277],{"class":46},"_id",[16,279,60],{"class":50},[16,281,282],{"class":46}," anotherDepartment",[16,284,106],{"class":79},[16,286,288],{"class":38,"line":287},7,[16,289,217],{"emptyLinePlaceholder":216},[16,291,293,295,297,300,302,304,307],{"class":38,"line":292},8,[16,294,76],{"class":42},[16,296,47],{"class":79},[16,298,299],{"class":46},"patchedResult",[16,301,92],{"class":79},[16,303,95],{"class":50},[16,305,306],{"class":42},"toBeDefined",[16,308,309],{"class":79},"()\n",[16,311,313,315,317,319,321,323,326,328,330,332,334],{"class":38,"line":312},9,[16,314,76],{"class":42},[16,316,47],{"class":79},[16,318,299],{"class":46},[16,320,92],{"class":79},[16,322,95],{"class":50},[16,324,325],{"class":42},"toHaveProperty",[16,327,47],{"class":79},[16,329,51],{"class":50},[16,331,277],{"class":54},[16,333,51],{"class":50},[16,335,106],{"class":79},[16,337,339,341,343,345,347,349,351],{"class":38,"line":338},10,[16,340,76],{"class":42},[16,342,47],{"class":79},[16,344,299],{"class":46},[16,346,92],{"class":79},[16,348,95],{"class":50},[16,350,325],{"class":42},[16,352,353],{"class":79},"(\n",[16,355,357,360,363,365],{"class":38,"line":356},11,[16,358,359],{"class":50},"    '",[16,361,362],{"class":54},"name",[16,364,51],{"class":50},[16,366,367],{"class":50},",\n",[16,369,371,374,376,378,380,383],{"class":38,"line":370},12,[16,372,373],{"class":46},"    anotherDepartment",[16,375,95],{"class":50},[16,377,362],{"class":46},[16,379,95],{"class":50},[16,381,382],{"class":42},"toLowerCase",[16,384,309],{"class":79},[16,386,388],{"class":38,"line":387},13,[16,389,390],{"class":79},"  )\n",[16,392,394,396,398,400,402,404,406,408,410,413,415],{"class":38,"line":393},14,[16,395,76],{"class":42},[16,397,47],{"class":79},[16,399,299],{"class":46},[16,401,92],{"class":79},[16,403,95],{"class":50},[16,405,325],{"class":42},[16,407,47],{"class":79},[16,409,51],{"class":50},[16,411,412],{"class":54},"createdAt",[16,414,51],{"class":50},[16,416,106],{"class":79},[16,418,420,422,424,426,428,430,432,434,436,439,441],{"class":38,"line":419},15,[16,421,76],{"class":42},[16,423,47],{"class":79},[16,425,299],{"class":46},[16,427,92],{"class":79},[16,429,95],{"class":50},[16,431,325],{"class":42},[16,433,47],{"class":79},[16,435,51],{"class":50},[16,437,438],{"class":54},"updatedAt",[16,440,51],{"class":50},[16,442,106],{"class":79},[16,444,446,448],{"class":38,"line":445},16,[16,447,112],{"class":50},[16,449,106],{"class":46},[16,451,453],{"class":38,"line":452},17,[16,454,217],{"emptyLinePlaceholder":216},[16,456,458,460,462,464,467,469,471,473,475,477],{"class":38,"line":457},18,[16,459,43],{"class":42},[16,461,47],{"class":46},[16,463,51],{"class":50},[16,465,466],{"class":54},"should delete",[16,468,51],{"class":50},[16,470,60],{"class":50},[16,472,189],{"class":66},[16,474,63],{"class":50},[16,476,67],{"class":66},[16,478,70],{"class":50},[16,480,482,484,486,488,490,492],{"class":38,"line":481},19,[16,483,76],{"class":46},[16,485,95],{"class":50},[16,487,204],{"class":42},[16,489,47],{"class":79},[16,491,209],{"class":82},[16,493,106],{"class":79},[16,495,497],{"class":38,"line":496},20,[16,498,217],{"emptyLinePlaceholder":216},[16,500,502,504,507,509,511,513,515],{"class":38,"line":501},21,[16,503,223],{"class":66},[16,505,506],{"class":46}," deleteResult",[16,508,229],{"class":50},[16,510,233],{"class":232},[16,512,236],{"class":50},[16,514,240],{"class":239},[16,516,243],{"class":46},[16,518,520,522,524,526,528],{"class":38,"line":519},22,[16,521,249],{"class":50},[16,523,252],{"class":42},[16,525,47],{"class":79},[16,527,257],{"class":46},[16,529,106],{"class":79},[16,531,533,535,538,540,542,544,546],{"class":38,"line":532},23,[16,534,249],{"class":50},[16,536,537],{"class":42},"remove",[16,539,47],{"class":79},[16,541,272],{"class":46},[16,543,95],{"class":50},[16,545,277],{"class":46},[16,547,106],{"class":79},[16,549,551],{"class":38,"line":550},24,[16,552,217],{"emptyLinePlaceholder":216},[16,554,556,558,560,563,565,567,569],{"class":38,"line":555},25,[16,557,76],{"class":42},[16,559,47],{"class":79},[16,561,562],{"class":46},"deleteResult",[16,564,92],{"class":79},[16,566,95],{"class":50},[16,568,306],{"class":42},[16,570,309],{"class":79},[16,572,574,576,578,580,582,584,586,588,590,592,594],{"class":38,"line":573},26,[16,575,76],{"class":42},[16,577,47],{"class":79},[16,579,562],{"class":46},[16,581,92],{"class":79},[16,583,95],{"class":50},[16,585,325],{"class":42},[16,587,47],{"class":79},[16,589,51],{"class":50},[16,591,277],{"class":54},[16,593,51],{"class":50},[16,595,106],{"class":79},[16,597,599,601,603,605,607,609,611,613,615,617,619,621,624,626,628,630,632],{"class":38,"line":598},27,[16,600,76],{"class":42},[16,602,47],{"class":79},[16,604,562],{"class":46},[16,606,92],{"class":79},[16,608,95],{"class":50},[16,610,325],{"class":42},[16,612,47],{"class":79},[16,614,51],{"class":50},[16,616,362],{"class":54},[16,618,51],{"class":50},[16,620,60],{"class":50},[16,622,623],{"class":46}," result",[16,625,95],{"class":50},[16,627,362],{"class":46},[16,629,95],{"class":50},[16,631,382],{"class":42},[16,633,634],{"class":79},"())\n",[16,636,638,640,642,644,646,648,650,652,654,656,658],{"class":38,"line":637},28,[16,639,76],{"class":42},[16,641,47],{"class":79},[16,643,562],{"class":46},[16,645,92],{"class":79},[16,647,95],{"class":50},[16,649,325],{"class":42},[16,651,47],{"class":79},[16,653,51],{"class":50},[16,655,412],{"class":54},[16,657,51],{"class":50},[16,659,106],{"class":79},[16,661,663,665,667,669,671,673,675,677,679,681,683],{"class":38,"line":662},29,[16,664,76],{"class":42},[16,666,47],{"class":79},[16,668,562],{"class":46},[16,670,92],{"class":79},[16,672,95],{"class":50},[16,674,325],{"class":42},[16,676,47],{"class":79},[16,678,51],{"class":50},[16,680,438],{"class":54},[16,682,51],{"class":50},[16,684,106],{"class":79},[16,686,688,690],{"class":38,"line":687},30,[16,689,112],{"class":50},[16,691,106],{"class":46},[13,693,694,695,698],{},"Mais plus j'ajoutais de fonctionnalités à la plateforme, plus je réalisais la valeur des tests. Ils peuvent ",[119,696,697],{},"garantir qu'une nouvelle fonctionnalité ne casse pas une fonctionnalité existante"," sans l'ennui de tester manuellement tout. Cela était particulièrement évident parce que Feathers.js a de nombreuses parties complexes et des services qui peuvent facilement se casser lorsqu'une partie est modifiée.",[27,700,702],{"className":167,"code":701,"language":169,"meta":32,"style":32},"export default {\n  before: {\n    all: [],\n    find: [],\n    get: [],\n    create: [checkData(checkDataOptions)],\n    update: [disallow()],\n    patch: [checkData(checkDataOptions)],\n    remove: [],\n  },\n\n  after: {\n    all: [],\n    find: [iff(isProvider('external'), pickResult())],\n    get: [iff(isProvider('external'), pickResult())],\n    create: [],\n    update: [],\n    patch: [],\n    remove: [],\n  },\n}\n",[34,703,704,714,723,735,746,757,775,792,807,818,823,827,836,846,883,915,925,935,945,955,959],{"__ignoreMap":32},[16,705,706,709,712],{"class":38,"line":39},[16,707,708],{"class":239},"export",[16,710,711],{"class":239}," default",[16,713,70],{"class":50},[16,715,716,719,721],{"class":38,"line":73},[16,717,718],{"class":79},"  before",[16,720,229],{"class":50},[16,722,70],{"class":50},[16,724,725,728,730,733],{"class":38,"line":109},[16,726,727],{"class":79},"    all",[16,729,229],{"class":50},[16,731,732],{"class":46}," []",[16,734,367],{"class":50},[16,736,737,740,742,744],{"class":38,"line":220},[16,738,739],{"class":79},"    find",[16,741,229],{"class":50},[16,743,732],{"class":46},[16,745,367],{"class":50},[16,747,748,751,753,755],{"class":38,"line":246},[16,749,750],{"class":79},"    get",[16,752,229],{"class":50},[16,754,732],{"class":46},[16,756,367],{"class":50},[16,758,759,762,764,767,770,773],{"class":38,"line":262},[16,760,761],{"class":79},"    create",[16,763,229],{"class":50},[16,765,766],{"class":46}," [",[16,768,769],{"class":42},"checkData",[16,771,772],{"class":46},"(checkDataOptions)]",[16,774,367],{"class":50},[16,776,777,780,782,784,787,790],{"class":38,"line":287},[16,778,779],{"class":79},"    update",[16,781,229],{"class":50},[16,783,766],{"class":46},[16,785,786],{"class":42},"disallow",[16,788,789],{"class":46},"()]",[16,791,367],{"class":50},[16,793,794,797,799,801,803,805],{"class":38,"line":292},[16,795,796],{"class":79},"    patch",[16,798,229],{"class":50},[16,800,766],{"class":46},[16,802,769],{"class":42},[16,804,772],{"class":46},[16,806,367],{"class":50},[16,808,809,812,814,816],{"class":38,"line":312},[16,810,811],{"class":79},"    remove",[16,813,229],{"class":50},[16,815,732],{"class":46},[16,817,367],{"class":50},[16,819,820],{"class":38,"line":338},[16,821,822],{"class":50},"  },\n",[16,824,825],{"class":38,"line":356},[16,826,217],{"emptyLinePlaceholder":216},[16,828,829,832,834],{"class":38,"line":370},[16,830,831],{"class":79},"  after",[16,833,229],{"class":50},[16,835,70],{"class":50},[16,837,838,840,842,844],{"class":38,"line":387},[16,839,727],{"class":79},[16,841,229],{"class":50},[16,843,732],{"class":46},[16,845,367],{"class":50},[16,847,848,850,852,854,857,859,862,864,866,869,871,873,875,878,881],{"class":38,"line":393},[16,849,739],{"class":79},[16,851,229],{"class":50},[16,853,766],{"class":46},[16,855,856],{"class":42},"iff",[16,858,47],{"class":46},[16,860,861],{"class":42},"isProvider",[16,863,47],{"class":46},[16,865,51],{"class":50},[16,867,868],{"class":54},"external",[16,870,51],{"class":50},[16,872,92],{"class":46},[16,874,60],{"class":50},[16,876,877],{"class":42}," pickResult",[16,879,880],{"class":46},"())]",[16,882,367],{"class":50},[16,884,885,887,889,891,893,895,897,899,901,903,905,907,909,911,913],{"class":38,"line":419},[16,886,750],{"class":79},[16,888,229],{"class":50},[16,890,766],{"class":46},[16,892,856],{"class":42},[16,894,47],{"class":46},[16,896,861],{"class":42},[16,898,47],{"class":46},[16,900,51],{"class":50},[16,902,868],{"class":54},[16,904,51],{"class":50},[16,906,92],{"class":46},[16,908,60],{"class":50},[16,910,877],{"class":42},[16,912,880],{"class":46},[16,914,367],{"class":50},[16,916,917,919,921,923],{"class":38,"line":445},[16,918,761],{"class":79},[16,920,229],{"class":50},[16,922,732],{"class":46},[16,924,367],{"class":50},[16,926,927,929,931,933],{"class":38,"line":452},[16,928,779],{"class":79},[16,930,229],{"class":50},[16,932,732],{"class":46},[16,934,367],{"class":50},[16,936,937,939,941,943],{"class":38,"line":457},[16,938,796],{"class":79},[16,940,229],{"class":50},[16,942,732],{"class":46},[16,944,367],{"class":50},[16,946,947,949,951,953],{"class":38,"line":481},[16,948,811],{"class":79},[16,950,229],{"class":50},[16,952,732],{"class":46},[16,954,367],{"class":50},[16,956,957],{"class":38,"line":496},[16,958,822],{"class":50},[16,960,961],{"class":38,"line":501},[16,962,963],{"class":50},"}\n",[13,965,966,967],{},"La complexité de l'application a crû de manière exponentielle, fonctionnalité après fonctionnalité. Cela était plus lié à l'architecture de Feathers.js, mais combiné avec les défis liés à l'écriture de tests efficaces, c'était un cauchemar à maintenir. ",[138,968,969],{},"Chaque changement faisait échouer tant de tests que j'étais incertain du bon fonctionnement de l'application.",[13,971,972,973],{},"À partir de ce moment-là, j'ai décidé que la capacité à tester l'application était un critère pour choisir une nouvelle pile. ",[138,974,975],{},"Et ce sera un long voyage, car en 2024, j'apprends encore beaucoup mais j'écris plus de tests que jamais.",[13,977,978,979,984],{},"Début 2021, Strapi gagnait en popularité, et je l'ai envisagé comme un remplacement potentiel pour Feathers.js, toujours pour construire la plateforme de tutorat. J'étais heureux de voir que Strapi avait une ",[145,980,983],{"href":981,"rel":982},"https:\u002F\u002Fdocs.strapi.io\u002Fdev-docs\u002Ftesting",[149],"page dédiée aux tests"," dans sa documentation.",[13,986,987],{},"Alors, je me suis lancé et j'ai créé un nouveau projet avec Strapi pour commencer et voir si les tests étaient efficaces.",[13,989,990,991,996,997],{},"Malheureusement, j'ai immédiatement ",[145,992,995],{"href":993,"rel":994},"https:\u002F\u002Fgithub.com\u002Fstrapi\u002Fstrapi\u002Fissues\u002F9376",[149],"rencontré un problème qui n'a jamais été résolu",". Incapable d'exécuter les tests, j'ai abandonné et la plateforme de tutorat n'a jamais été migrée vers Strapi, ni déployée en production. ",[138,998,999],{},"J'ai beaucoup appris de ce projet annexe. Souvent, le voyage est plus important que la destination.",[13,1001,1002],{},[1003,1004],"img",{"alt":1005,"src":1006},"Capture d'écran de ce problème 9376","\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests\u002Fstrapi-testing-issue.png",[13,1008,1009],{},"Alors, récapitulons :",[1011,1012,1013,1017,1020,1023],"ul",{},[1014,1015,1016],"li",{},"Je ne connais que JavaScript.",[1014,1018,1019],{},"Feathers.js a une architecture complexe et une documentation médiocre sur les tests.",[1014,1021,1022],{},"Strapi a une bonne documentation sur les tests, mais je n'ai pas pu exécuter les tests.",[1014,1024,1025],{},"Je dois trouver un nouveau projet annexe pour apprendre les tests.",[13,1027,1028,1029],{},"Quelques mois plus tard, j'ai entendu parler d'AdonisJS. Je ne me souviens pas comment, mais à ce moment-là, la version 5 était en bêta. C'était une bouffée d'air frais car la documentation semblait très bonne, et le framework était riche en fonctionnalités. Plein de fonctionnalités, oui, mais la partie tests n'était pas encore là. ",[138,1030,1031],{},"L'équipe principale a publié Japa un an plus tard. C'est un cadre de test agréable pour Node.js.",[13,1033,1034,1035,1038,1039],{},"Quoi qu'il en soit, j'ai tellement appris sur le développement backend et l'architecture avec AdonisJS que les tests n'étaient clairement pas une priorité. C'était la première fois que je pouvais séparer les fonctionnalités et éviter les dépendances internes. ",[138,1036,1037],{},"Bien plus propre et plus facile à entretenir que Feathers.js ou NestJS."," ",[138,1040,1041],{},"Oui, j'ai aussi essayé NestJS, mais ce framework est une véritable blague pour moi.",[13,1043,1044,1045],{},"À la fin d'août 2021, je me suis lancé dans un nouveau projet annexe appelé Insamee, un écosystème étudiant. C'était le successeur de la plateforme de tutorat. L'architecture est importante à clarifier. À l'origine, c'était un serveur API avec AdonisJS et quatre applications front-end utilisant Nuxt. ",[138,1046,1047],{},"Trop lourd et trop compliqué, comme je le réalise maintenant.",[13,1049,1050],{},[1003,1051],{"alt":1052,"src":1053},"Capture d'écran d'Insamee","\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests\u002Finsameeapp.png",[13,1055,1056],{},"À la fin de 2021, j'ai réécrit le projet depuis le début en utilisant uniquement Adonis et un seul serveur. Plus de tests.",[13,1058,1059,1060,1063],{},"J'ai réussi à me faire dispenser de cours pour me concentrer sur mon projet. ",[138,1061,1062],{},"Une véritable opportunité."," Pour valider mon semestre, je devais écrire un rapport et faire une présentation en direct. Lors de la présentation, je n'ai pas parlé des tests (il n'y en avait pas). Cependant, le jury m'a interrogé à ce sujet. J'ai simplement dit que le runner n'était pas encore prêt, donc je n'avais écrit aucun test. Ils ont pris quelques minutes pour expliquer que les tests sont cruciaux, et j'ai clairement compris qu'un projet réel et professionnel doit avoir des tests, c'est non-négociable. Dans mon esprit, quelque chose a cliqué.",[13,1065,1066,1067,1070,1071,1074],{},"Par la suite, d'avril à août 2022, j'ai fait un stage de quatre mois dans une société de conseil à Paris. J'étais responsable de la création, depuis zéro, d'un panneau d'administration pour un projet de cluster de calcul hautes performances utilisant Angular 14. C'était une première pour moi. Je n'avais jamais utilisé Angular auparavant. J'ai mis des mois à saisir le concept de ",[34,1068,1069],{},"TestBed"," et le système d'injection de dépendances (DI). ",[138,1072,1073],{},"J'étais tellement perdu, mais plus tard, j'ai découvert que l'injection de dépendances est importante."," Pendant cette période, j'ai appris des concepts mais je n'avais pas de pratique réelle.",[13,1076,1077],{},"En 2024, j'ai effectué mon stage de six mois dans une entreprise de cloud suisse. Je faisais partie d'une équipe développant des composants pour d'autres projets. C'est là que j'ai vraiment commencé à apprécier les tests. Tout d'abord, la couverture était de 90 %. Cela signifie que si la couverture tombe en dessous de 90 %, vous n'avez d'autre choix que d'écrire des tests pour soumettre un MR. Le projet avait huit mois, donc il y avait beaucoup de tests à référence. J'ai également écrit de nombreux tests de bout en bout en utilisant Playwright.",[13,1079,1080],{},"Dans le même temps, j'ai regardé un live stream de Romain Lanz discutant de \"l'écriture de code testable\" et expliquant le DI dans Adonis. Avec ces explications et les exemples concrets que j'ai rencontrés pendant mon stage, les choses ont commencé à s'assembler et à avoir du sens.",[13,1082,1083],{},"Cette année, à Devoxx 2024, j'ai essayé d'assister à autant de conférences que possible sur le TDD et le DDD. Entendre des experts discuter d'exemples du monde réel et expliquer comment ils architecturent leurs applications pour les rendre testables et à l'épreuve du temps a été véritablement éclairant.",[1085,1086,1088,1091,1108,1121,1127,1133],"callout-read-more",{"id":1087},"f3e97a6a-ce47-42b8-8493-06eb37f8e964",[13,1089,1090],{},"Malgré tout cela, j'ai encore du mal à trouver des exemples de tests authentiques et pratiques. C'est tellement frustrant de connaître la théorie mais de ne pas pouvoir l'appliquer.",[13,1092,1093,1094,1099,1100],{},"Mais je crois que pour apprendre, il n'y a rien de plus efficace que d'agir. Alors, j'ai pris le framework que je connais le mieux, Nuxt, et j'ai commencé à expérimenter avec les ",[145,1095,1098],{"href":1096,"rel":1097},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ftest-utils",[149],"outils de test disponibles",". J'ai utilisé l'intégration de bout en bout avec Playwright, mais ce n'était pas une expérience agréable. Les tests prenaient trop de temps à s'exécuter. ",[138,1101,1102,1103,95],{},"Étrangement, l'expérience pendant mon stage était l'opposée. J'ai découvert que l'intégration Nuxt reconstruit l'application avant chaque test. J'ai fait ",[145,1104,1107],{"href":1105,"rel":1106},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ftest-utils\u002Fpull\u002F881",[149],"une PR pour permettre au runner de réutiliser un serveur existant",[13,1109,1110,1111,1116,1117,1120],{},"Dans le même temps, j'ai reçu des retours sur ",[145,1112,1115],{"href":1113,"rel":1114},"https:\u002F\u002Fgithub.com\u002FBarbapapazes\u002Fplausible-tracker",[149],"mon fork du tracker Plausible",". Certains bugs ont été signalés, et de nouvelles fonctionnalités ont été demandées. Le problème était que le projet n'avait pas de tests, et je me souvenais clairement à quel point cela avait été douloureux sur la plateforme de tutorat. J'ai également remarqué que je n'avais pas touché le projet depuis un certain temps, et que les tests manuels ne suffiraient pas pour garantir la qualité du projet à long terme. ",[138,1118,1119],{},"Lorsque vous n'avez pas touché un projet depuis un certain temps, vous devez tout réapprendre. Avec des tests fiables, vous pouvez être sûr que le projet fonctionne comme prévu, même après des refactorings, des corrections de bugs et de nouvelles fonctionnalités."," J'ai décidé d'écrire des tests avant de toucher quoi que ce soit d'autre. Cela m'a pris trois jours, mais maintenant, je suis confiant que le projet fonctionne comme attendu. C'est satisfaisant, et il n'y a plus de crainte de toucher au projet.",[13,1122,1123],{},[1003,1124],{"alt":1125,"src":1126},"Tests réussis du Plausible Tracker","\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests\u002Fplausible-tracker-passing-tests.png",[13,1128,1129,1130],{},"Enfin, à peu près au même moment, j'ai découvert Laracasts. J'ai appris PHP et rencontré des tests dans Laravel. C'était révélateur. Les tests sont bien expliqués, écrire des tests, même avec une base de données, est facile, et cela s'exécute très rapidement. Écrire des tests avec Pest est vraiment agréable. ",[138,1131,1132],{},"Si vous ne l'avez jamais essayé, vous devriez.",[1134,1135,1139,1143,1146,1149,1232,1238,1241],"callout",{"icon":1136,"text":1137,"to":1138},"i-ph-book-duotone","Essayez Laracasts","https:\u002F\u002Flaracasts.com\u002Freferral\u002FBarbapapazes",[127,1140,1142],{"id":1141},"comprendre-la-valeur-des-tests","Comprendre la Valeur des Tests",[13,1144,1145],{},"Il m'a fallu six ans pour saisir la valeur des tests et écrire des tests significatifs. Est-ce long ? Je ne sais pas. Cela démontre que l'apprentissage est un processus itératif, avec des échecs et des réessais. Avec de la persévérance, on finit par y arriver.",[13,1147,1148],{},"Tout au long de ce voyage, je me suis posé de nombreuses questions. Voici quelques réponses que j'aurais aimé trouver plus tôt.",[1150,1151,1152,1155,1161,1167,1173,1179,1185,1191,1197,1215,1220,1226],"ol",{},[1014,1153,1154],{},"Les tests ne doivent pas être difficiles.",[1014,1156,1157,1158,95],{},"Cependant, tester est plus compliqué que ",[34,1159,1160],{},"expect(1 + 1).toBe(2)",[1014,1162,1163,1164],{},"La difficulté des tests est souvent liée à l'architecture de l'application et à la capacité de séparer les fonctionnalités. ",[138,1165,1166],{},"Plus l'application est modulaire, plus il est facile de tester.",[1014,1168,1169,1170],{},"Avant de choisir un outil, considérez la capacité de tester votre application. ",[138,1171,1172],{},"Si vous ne pouvez pas le tester, ça ne vaut pas le coup.",[1014,1174,1175,1176],{},"Aucun test n'est acceptable. ",[138,1177,1178],{},"C'est un compromis. Utilisez-le judicieusement.",[1014,1180,1181,1182],{},"La règle 5 n'invalide pas les règles 4 ou 3. ",[138,1183,1184],{},"Si vous finissez par écrire des tests, vous vous en remercierez.",[1014,1186,1187,1188],{},"Viser 100 % de couverture n'a pas de sens en soi. ",[138,1189,1190],{},"C'est un piège qui peut mener à de mauvaises pratiques.",[1014,1192,1193,1194],{},"Les tests unitaires, d'intégration et de bout en bout ont de la valeur. ",[138,1195,1196],{},"Choisissez celui qui correspond le mieux à vos besoins.",[1014,1198,1199,1200,1203,1204,1207,1208,1211,1212],{},"Structurez votre test avec la méthode ",[34,1201,1202],{},"arrange",", ",[34,1205,1206],{},"act"," et ",[34,1209,1210],{},"assert",". ",[138,1213,1214],{},"C'est une bonne méthode pour organiser vos tests et commencer à les écrire.",[1014,1216,1217,1218,95],{},"Écrivez d'abord la partie ",[34,1219,1210],{},[1014,1221,1222,1223],{},"Pensez à un test comme une description d'une spécification de l'application. ",[138,1224,1225],{},"Mon application devrait afficher\u002Ffaire cela lorsque cela se produit.",[1014,1227,1228,1229],{},"Et le plus important, écrivez du code testable avant d'écrire des tests. ",[138,1230,1231],{},"Cette approche rendra votre code plus lisible, maintenable et testable.",[13,1233,1234,1235],{},"Enfin, ne tentez pas de tout tester dès le premier jour de votre voyage. Commencez petit, apprenez, écrivez des tests unitaires simples, comprenez comment modulariser votre code et progressez à partir de là. ",[138,1236,1237],{},"C'est un long voyage, mais cela en vaut la peine.",[13,1239,1240],{},"J'apprends encore beaucoup, mais je suis confiant que je suis sur la bonne voie. À bientôt dans le prochain article !",[13,1242,1243],{},[138,1244,1245,1246,95],{},"Laracasts est la meilleure ressource que j'ai trouvée pour apprendre les tests. PHP est génial, et apprendre des concepts généraux est encore mieux. ",[145,1247,1249],{"href":1138,"rel":1248},[149],"Essayez-le maintenant",[1251,1252,1253],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":32,"searchDepth":73,"depth":73,"links":1255},[1256],{"id":129,"depth":73,"text":130},"eb021b0f-2f6c-467a-9d88-1cc99e17d6d9","2024-08-30","Tester, c'est une longue expédition pour découvrir comment l'architecture et les dépendances d'une app peuvent avoir un impact direct sur sa testabilité.","md",{},"\u002Ffr\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests","---\ncontentId: eb021b0f-2f6c-467a-9d88-1cc99e17d6d9\ntitle: Tester est Plus Vastes que la Simple Écriture de Tests\ndescription: Tester, c'est une longue expédition pour découvrir comment l'architecture et les dépendances d'une app peuvent avoir un impact direct sur sa testabilité.\ndate: 2024-08-30\n---\n\n> [!NOTE]\n> Je ne suis pas un expert en tests. Je partage simplement mes réflexions sur les tests en tant que développeur, dans un article que j'aurais apprécié lorsque j'ai commencé à coder.\n\nJ'ai commencé à coder il y a six ans. Depuis, j'ai entendu beaucoup parler des tests, mais j'ai vu peu d'exemples réels et pratiques.\n\nDans de nombreux articles que j'ai lus, les tests ressemblent à ça :\n\n```js\nit('should return 2 when 1 + 1', () => {\n  expect(1 + 1).toBe(2)\n})\n```\n\nC'est **loin des scénarios du monde réel** et cela n'aide pas à comprendre la véritable valeur des tests.\n\nJe dois admettre que, quand je ne comprends pas quelque chose, j'évite de l'utiliser. Néanmoins, depuis ma première rencontre avec le concept de tests, cela a persisté dans mon esprit, me poussant à rassembler des connaissances à ce sujet.\n\n## Un Long Voyage\n\nJ'ai d'abord entendu parler des tests lorsque j'ai appris Vue 2 en 2019. Dans la section des outils, sous la page \"Single File Component\", j'ai trouvé une section dédiée aux \"Tests\".\n\nJe pense que j'ai lu le début de la page mais je n'ai jamais été plus loin. Il y avait trop de nouveaux concepts à saisir, trop d'outils à apprendre, et trop de choix à faire. _À ce moment-là, j'ai compris que les tests front-end sont de loin la partie la plus difficile des tests._\n\nEn 2020, avec quelques amis, nous avons développé une plateforme de tutorat. Le serveur API a été construit avec [Feathers.js 4](https:\u002F\u002Fcrow.docs.feathersjs.com\u002F). À ce moment-là, j'avais encore du mal avec les tests. Je me souviens avoir cherché [la page des tests dans la documentation de Feathers.js](https:\u002F\u002Fcrow.docs.feathersjs.com\u002Fguides\u002Fbasics\u002Ftesting.html#writing-tests) et même l'avoir lue. Malgré le fait de ne pas bien la comprendre, j'ai écrit de nombreux tests. C'était une vraie lutte, car la distinction entre les tests unitaires et les tests d'intégration m'était floue, et les exécuter dans un CI était très difficile. _J'utilisais MongoDB et Azure CI. En y repensant, je pense que je voulais souffrir._ Je me souviens aussi avoir essayé d'atteindre 100 % de couverture. _J'étais tellement naïf._\n\n```ts\nit('should patch', async () => {\n  expect.assertions(5)\n\n  const patchedResult: Department = await app\n    .service(serviceName)\n    .patch(result._id, anotherDepartment)\n\n  expect(patchedResult).toBeDefined()\n  expect(patchedResult).toHaveProperty('_id')\n  expect(patchedResult).toHaveProperty(\n    'name',\n    anotherDepartment.name.toLowerCase()\n  )\n  expect(patchedResult).toHaveProperty('createdAt')\n  expect(patchedResult).toHaveProperty('updatedAt')\n})\n\nit('should delete', async () => {\n  expect.assertions(5)\n\n  const deleteResult: Department = await app\n    .service(serviceName)\n    .remove(result._id)\n\n  expect(deleteResult).toBeDefined()\n  expect(deleteResult).toHaveProperty('_id')\n  expect(deleteResult).toHaveProperty('name', result.name.toLowerCase())\n  expect(deleteResult).toHaveProperty('createdAt')\n  expect(deleteResult).toHaveProperty('updatedAt')\n})\n```\n\nMais plus j'ajoutais de fonctionnalités à la plateforme, plus je réalisais la valeur des tests. Ils peuvent **garantir qu'une nouvelle fonctionnalité ne casse pas une fonctionnalité existante** sans l'ennui de tester manuellement tout. Cela était particulièrement évident parce que Feathers.js a de nombreuses parties complexes et des services qui peuvent facilement se casser lorsqu'une partie est modifiée.\n\n```ts\nexport default {\n  before: {\n    all: [],\n    find: [],\n    get: [],\n    create: [checkData(checkDataOptions)],\n    update: [disallow()],\n    patch: [checkData(checkDataOptions)],\n    remove: [],\n  },\n\n  after: {\n    all: [],\n    find: [iff(isProvider('external'), pickResult())],\n    get: [iff(isProvider('external'), pickResult())],\n    create: [],\n    update: [],\n    patch: [],\n    remove: [],\n  },\n}\n```\n\nLa complexité de l'application a crû de manière exponentielle, fonctionnalité après fonctionnalité. Cela était plus lié à l'architecture de Feathers.js, mais combiné avec les défis liés à l'écriture de tests efficaces, c'était un cauchemar à maintenir. _Chaque changement faisait échouer tant de tests que j'étais incertain du bon fonctionnement de l'application._\n\nÀ partir de ce moment-là, j'ai décidé que la capacité à tester l'application était un critère pour choisir une nouvelle pile. _Et ce sera un long voyage, car en 2024, j'apprends encore beaucoup mais j'écris plus de tests que jamais._\n\nDébut 2021, Strapi gagnait en popularité, et je l'ai envisagé comme un remplacement potentiel pour Feathers.js, toujours pour construire la plateforme de tutorat. J'étais heureux de voir que Strapi avait une [page dédiée aux tests](https:\u002F\u002Fdocs.strapi.io\u002Fdev-docs\u002Ftesting) dans sa documentation.\n\nAlors, je me suis lancé et j'ai créé un nouveau projet avec Strapi pour commencer et voir si les tests étaient efficaces.\n\nMalheureusement, j'ai immédiatement [rencontré un problème qui n'a jamais été résolu](https:\u002F\u002Fgithub.com\u002Fstrapi\u002Fstrapi\u002Fissues\u002F9376). Incapable d'exécuter les tests, j'ai abandonné et la plateforme de tutorat n'a jamais été migrée vers Strapi, ni déployée en production. _J'ai beaucoup appris de ce projet annexe. Souvent, le voyage est plus important que la destination._\n\n![Capture d'écran de ce problème 9376](\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests\u002Fstrapi-testing-issue.png)\n\nAlors, récapitulons :\n\n- Je ne connais que JavaScript.\n- Feathers.js a une architecture complexe et une documentation médiocre sur les tests.\n- Strapi a une bonne documentation sur les tests, mais je n'ai pas pu exécuter les tests.\n- Je dois trouver un nouveau projet annexe pour apprendre les tests.\n\nQuelques mois plus tard, j'ai entendu parler d'AdonisJS. Je ne me souviens pas comment, mais à ce moment-là, la version 5 était en bêta. C'était une bouffée d'air frais car la documentation semblait très bonne, et le framework était riche en fonctionnalités. Plein de fonctionnalités, oui, mais la partie tests n'était pas encore là. _L'équipe principale a publié Japa un an plus tard. C'est un cadre de test agréable pour Node.js._\n\nQuoi qu'il en soit, j'ai tellement appris sur le développement backend et l'architecture avec AdonisJS que les tests n'étaient clairement pas une priorité. C'était la première fois que je pouvais séparer les fonctionnalités et éviter les dépendances internes. _Bien plus propre et plus facile à entretenir que Feathers.js ou NestJS._ _Oui, j'ai aussi essayé NestJS, mais ce framework est une véritable blague pour moi._\n\nÀ la fin d'août 2021, je me suis lancé dans un nouveau projet annexe appelé Insamee, un écosystème étudiant. C'était le successeur de la plateforme de tutorat. L'architecture est importante à clarifier. À l'origine, c'était un serveur API avec AdonisJS et quatre applications front-end utilisant Nuxt. _Trop lourd et trop compliqué, comme je le réalise maintenant._\n\n![Capture d'écran d'Insamee](\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests\u002Finsameeapp.png)\n\nÀ la fin de 2021, j'ai réécrit le projet depuis le début en utilisant uniquement Adonis et un seul serveur. Plus de tests.\n\nJ'ai réussi à me faire dispenser de cours pour me concentrer sur mon projet. _Une véritable opportunité._ Pour valider mon semestre, je devais écrire un rapport et faire une présentation en direct. Lors de la présentation, je n'ai pas parlé des tests (il n'y en avait pas). Cependant, le jury m'a interrogé à ce sujet. J'ai simplement dit que le runner n'était pas encore prêt, donc je n'avais écrit aucun test. Ils ont pris quelques minutes pour expliquer que les tests sont cruciaux, et j'ai clairement compris qu'un projet réel et professionnel doit avoir des tests, c'est non-négociable. Dans mon esprit, quelque chose a cliqué.\n\nPar la suite, d'avril à août 2022, j'ai fait un stage de quatre mois dans une société de conseil à Paris. J'étais responsable de la création, depuis zéro, d'un panneau d'administration pour un projet de cluster de calcul hautes performances utilisant Angular 14. C'était une première pour moi. Je n'avais jamais utilisé Angular auparavant. J'ai mis des mois à saisir le concept de `TestBed` et le système d'injection de dépendances (DI). _J'étais tellement perdu, mais plus tard, j'ai découvert que l'injection de dépendances est importante._ Pendant cette période, j'ai appris des concepts mais je n'avais pas de pratique réelle.\n\nEn 2024, j'ai effectué mon stage de six mois dans une entreprise de cloud suisse. Je faisais partie d'une équipe développant des composants pour d'autres projets. C'est là que j'ai vraiment commencé à apprécier les tests. Tout d'abord, la couverture était de 90 %. Cela signifie que si la couverture tombe en dessous de 90 %, vous n'avez d'autre choix que d'écrire des tests pour soumettre un MR. Le projet avait huit mois, donc il y avait beaucoup de tests à référence. J'ai également écrit de nombreux tests de bout en bout en utilisant Playwright.\n\nDans le même temps, j'ai regardé un live stream de Romain Lanz discutant de \"l'écriture de code testable\" et expliquant le DI dans Adonis. Avec ces explications et les exemples concrets que j'ai rencontrés pendant mon stage, les choses ont commencé à s'assembler et à avoir du sens.\n\nCette année, à Devoxx 2024, j'ai essayé d'assister à autant de conférences que possible sur le TDD et le DDD. Entendre des experts discuter d'exemples du monde réel et expliquer comment ils architecturent leurs applications pour les rendre testables et à l'épreuve du temps a été véritablement éclairant.\n\n\u003CCalloutReadMore id=\"f3e97a6a-ce47-42b8-8493-06eb37f8e964\" \u002F>\n\nMalgré tout cela, j'ai encore du mal à trouver des exemples de tests authentiques et pratiques. C'est tellement frustrant de connaître la théorie mais de ne pas pouvoir l'appliquer.\n\nMais je crois que pour apprendre, il n'y a rien de plus efficace que d'agir. Alors, j'ai pris le framework que je connais le mieux, Nuxt, et j'ai commencé à expérimenter avec les [outils de test disponibles](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ftest-utils). J'ai utilisé l'intégration de bout en bout avec Playwright, mais ce n'était pas une expérience agréable. Les tests prenaient trop de temps à s'exécuter. _Étrangement, l'expérience pendant mon stage était l'opposée. J'ai découvert que l'intégration Nuxt reconstruit l'application avant chaque test. J'ai fait [une PR pour permettre au runner de réutiliser un serveur existant](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ftest-utils\u002Fpull\u002F881)._\n\nDans le même temps, j'ai reçu des retours sur [mon fork du tracker Plausible](https:\u002F\u002Fgithub.com\u002FBarbapapazes\u002Fplausible-tracker). Certains bugs ont été signalés, et de nouvelles fonctionnalités ont été demandées. Le problème était que le projet n'avait pas de tests, et je me souvenais clairement à quel point cela avait été douloureux sur la plateforme de tutorat. J'ai également remarqué que je n'avais pas touché le projet depuis un certain temps, et que les tests manuels ne suffiraient pas pour garantir la qualité du projet à long terme. _Lorsque vous n'avez pas touché un projet depuis un certain temps, vous devez tout réapprendre. Avec des tests fiables, vous pouvez être sûr que le projet fonctionne comme prévu, même après des refactorings, des corrections de bugs et de nouvelles fonctionnalités._ J'ai décidé d'écrire des tests avant de toucher quoi que ce soit d'autre. Cela m'a pris trois jours, mais maintenant, je suis confiant que le projet fonctionne comme attendu. C'est satisfaisant, et il n'y a plus de crainte de toucher au projet.\n\n![Tests réussis du Plausible Tracker](\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests\u002Fplausible-tracker-passing-tests.png)\n\nEnfin, à peu près au même moment, j'ai découvert Laracasts. J'ai appris PHP et rencontré des tests dans Laravel. C'était révélateur. Les tests sont bien expliqués, écrire des tests, même avec une base de données, est facile, et cela s'exécute très rapidement. Écrire des tests avec Pest est vraiment agréable. _Si vous ne l'avez jamais essayé, vous devriez._\n\n\u003CCallout icon=\"i-ph-book-duotone\" text=\"Essayez Laracasts\" to=\"https:\u002F\u002Flaracasts.com\u002Freferral\u002FBarbapapazes\" \u002F>\n\n## Comprendre la Valeur des Tests\n\nIl m'a fallu six ans pour saisir la valeur des tests et écrire des tests significatifs. Est-ce long ? Je ne sais pas. Cela démontre que l'apprentissage est un processus itératif, avec des échecs et des réessais. Avec de la persévérance, on finit par y arriver.\n\nTout au long de ce voyage, je me suis posé de nombreuses questions. Voici quelques réponses que j'aurais aimé trouver plus tôt.\n\n1. Les tests ne doivent pas être difficiles.\n2. Cependant, tester est plus compliqué que `expect(1 + 1).toBe(2)`.\n3. La difficulté des tests est souvent liée à l'architecture de l'application et à la capacité de séparer les fonctionnalités. _Plus l'application est modulaire, plus il est facile de tester._\n4. Avant de choisir un outil, considérez la capacité de tester votre application. _Si vous ne pouvez pas le tester, ça ne vaut pas le coup._\n5. Aucun test n'est acceptable. _C'est un compromis. Utilisez-le judicieusement._\n6. La règle 5 n'invalide pas les règles 4 ou 3. _Si vous finissez par écrire des tests, vous vous en remercierez._\n7. Viser 100 % de couverture n'a pas de sens en soi. _C'est un piège qui peut mener à de mauvaises pratiques._\n8. Les tests unitaires, d'intégration et de bout en bout ont de la valeur. _Choisissez celui qui correspond le mieux à vos besoins._\n9. Structurez votre test avec la méthode `arrange`, `act` et `assert`. _C'est une bonne méthode pour organiser vos tests et commencer à les écrire._\n10. Écrivez d'abord la partie `assert`.\n11. Pensez à un test comme une description d'une spécification de l'application. _Mon application devrait afficher\u002Ffaire cela lorsque cela se produit._\n12. Et le plus important, écrivez du code testable avant d'écrire des tests. _Cette approche rendra votre code plus lisible, maintenable et testable._\n\nEnfin, ne tentez pas de tout tester dès le premier jour de votre voyage. Commencez petit, apprenez, écrivez des tests unitaires simples, comprenez comment modulariser votre code et progressez à partir de là. _C'est un long voyage, mais cela en vaut la peine._\n\nJ'apprends encore beaucoup, mais je suis confiant que je suis sur la bonne voie. À bientôt dans le prochain article !\n\n_Laracasts est la meilleure ressource que j'ai trouvée pour apprendre les tests. PHP est génial, et apprendre des concepts généraux est encore mieux. [Essayez-le maintenant](https:\u002F\u002Flaracasts.com\u002Freferral\u002FBarbapapazes)._\n",null,{"title":5,"description":1259},{"loc":1262,"images":1267},[1268,1269,1270],{"loc":1006},{"loc":1053},{"loc":1126},"fr\u002Fposts\u002Ftesting-is-more-larger-than-just-writing-some-tests","Xzs_iKEludgctd5i2QXeGODw4CcRlVDcjQS-tG2ijjc",{"id":1274,"title":1275,"body":1276,"contentId":1087,"date":1716,"description":1717,"extension":1260,"meta":1718,"navigation":216,"path":1719,"rawbody":1720,"robots":1264,"schemaOrg":1264,"seo":1721,"sitemap":1722,"stem":1730,"__hash__":1731},"posts\u002Ffr\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights.md","Devoxx France 2024 : Intervention et Faits Marquants",{"type":7,"value":1277,"toc":1709},[1278,1288,1297,1303],[13,1279,1280,1281,1284,1285,95],{},"Devoxx France est une grande conférence qui se tient à Paris. Cette année, plus de ",[119,1282,1283],{},"4500 participants"," étaient présents avec 70 exposants et ",[119,1286,1287],{},"319 intervenants",[13,1289,1290,1291,1296],{},"C'est si vaste qu'il est impossible d'assister à toutes les conférences. Parfois, il y a plus de 10 conférences en même temps, mais grâce à la ",[145,1292,1295],{"href":1293,"rel":1294},"https:\u002F\u002Fwww.youtube.com\u002F@DevoxxFRvideos",[149],"rediffusion sur YouTube",", il est possible de les regarder plus tard.",[13,1298,1299],{},[1003,1300],{"alt":1301,"src":1302},"Photo du hall d'exposition et de mon badge d'intervenant.","\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Ffirst-day.jpg",[1134,1304,1309,1313,1320,1329,1339,1342,1503,1515,1518,1525,1533,1540,1546,1551,1554,1558,1561,1568,1574,1581,1587,1593,1600,1606,1613,1616,1622,1626,1629,1649,1652,1655,1658,1661,1664,1667],{"w-full":32,"icon":1305,"text":1306,"to":1307,"target":1308},"i-simple-icons-youtube","Regardez ma conférence sur UnJS","https:\u002F\u002Fyoutu.be\u002F0BApl8r1VWc","_blank",[127,1310,1312],{"id":1311},"mon-emploi-du-temps","Mon emploi du temps",[10,1314,1315],{},[13,1316,1317,1319],{},[16,1318,18],{},"\nCe n'est pas une recommandation, ce sont simplement des conférences que j'ai pu voir.",[13,1321,1322,1323,1328],{},"Avant de me rendre à Devoxx France, j'ai consulté le ",[145,1324,1327],{"href":1325,"rel":1326},"https:\u002F\u002Fmobile.devoxx.com\u002F",[149],"programme"," et j'ai dressé une liste des conférences que je voulais suivre. Il y a tellement de monde que certaines conférences étaient déjà complètes lorsque je suis arrivé dans la salle, et j'ai découvert d'autres conférences que j'ai préférées durant l'événement (et choisir parmi toutes ces conférences n'est pas facile).",[13,1330,1331,1332,1207,1335,1338],{},"Cette année, mon objectif était de voir un maximum de conférences sur ",[119,1333,1334],{},"DevOps",[119,1336,1337],{},"le code propre",". Je voulais également être surpris en assistant à des conférences que je n'aurais jamais suivies simplement parce que je connais l'intervenant ou parce que le titre est intéressant (et je n'ai pas été déçu).",[13,1340,1341],{},"Enfin, j'ai pu voir (les titres de conférences sont en français) :",[1011,1343,1344,1391,1444],{},[1014,1345,1346,1347],{},"Mercredi 17 avril\n",[1011,1348,1349,1355,1361,1367,1373,1379,1385],{},[1014,1350,1351,1354],{},[119,1352,1353],{},"IA en médecine : où en sommes-nous ?"," Présenté par Jean-Emmanuel Bibault",[1014,1356,1357,1360],{},[119,1358,1359],{},"React Server Components : Effet de mode ou réel progrès ?"," Présenté par Thomas Simonnet",[1014,1362,1363,1366],{},[119,1364,1365],{},"DDD Haute Vitesse (revisité)."," Présenté par Thomas Pierrain",[1014,1368,1369,1372],{},[119,1370,1371],{},"V, comme Vautledétour."," Présenté par Emmanuel Remy",[1014,1374,1375,1378],{},[119,1376,1377],{},"Comment bien planter un side project ?"," Présenté par David Laizé",[1014,1380,1381,1384],{},[119,1382,1383],{},"Toutes et tous Mercenaires de DevOps!"," Présenté par Arnaud Héritier, Henri Gomez, Pierre-Antoine Grégoire, Dimitri Baeli et Gildas Cuisinier",[1014,1386,1387,1390],{},[119,1388,1389],{},"La recherche sous stéroïdes - une histoire de sémantique."," Présenté par Mathilde Rigabert et Martin Labenne",[1014,1392,1393,1394],{},"Jeudi 18 avril\n",[1011,1395,1396,1402,1408,1414,1420,1426,1432,1438],{},[1014,1397,1398,1401],{},[119,1399,1400],{},"Les plus grandes erreurs de programmation."," Présenté par Mark Rendle",[1014,1403,1404,1407],{},[119,1405,1406],{},"Un monde shooté aux métaux."," Présenté par Guillaume Pitron et Agnes Crepet",[1014,1409,1410,1413],{},[119,1411,1412],{},"GatewayAPI, 10 ans de maturation pour une nouvelle API Kubernetes."," Présenté par Kevin Davin",[1014,1415,1416,1419],{},[119,1417,1418],{},"Comment K8S a changé le monde de l'Ops."," Présenté par Aurélien Moreau et Loïc Ortola",[1014,1421,1422,1425],{},[119,1423,1424],{},"Architecture Hexagonale : Comment venir à bout du code spaghetti ?"," Présenté par Kévin LLOPIS",[1014,1427,1428,1431],{},[119,1429,1430],{},"Java rencontre l'IA : Comment intégrer les LLMs dans vos applications avec LangChain4j."," Présenté par Lize Raes",[1014,1433,1434,1437],{},[119,1435,1436],{},"Les nouveautés de Java 21."," Présenté par Jean-Michel Doudoux",[1014,1439,1440,1443],{},[119,1441,1442],{},"Débugguez votre salaire ! Mes stratégies gagnantes pour réussir sa négociation salariale."," Présenté par Shirley Almosni-Chiche",[1014,1445,1446,1447],{},"Vendredi 19 avril\n",[1011,1448,1449,1455,1461,1467,1473,1479,1485,1491,1497],{},[1014,1450,1451,1454],{},[119,1452,1453],{},"Comment modéliser l'état du monde en 2100 ?"," Le Rapport Meadows. Présenté par Anatole Chouard",[1014,1456,1457,1460],{},[119,1458,1459],{},"Cybersécurité et cyberdéfense : un sujet géopolitique."," Présenté par Guillaume Poupard",[1014,1462,1463,1466],{},[119,1464,1465],{},"Model Mitosis : ne plus se tromper entre les microservices et le monolithe."," Présenté par Julien Topçu et Josian Chevalier",[1014,1468,1469,1472],{},[119,1470,1471],{},"L'architecture micro frontend : comment transformer son site web en puzzle géant collaboratif."," Présenté par Maxime Ribera et Ludovic Lagatie",[1014,1474,1475,1478],{},[119,1476,1477],{},"Unifié et Universel, le JavaScript avec UnJS."," Présenté par Estéban Soubiran (c'est moi)",[1014,1480,1481,1484],{},[119,1482,1483],{},"Au-delà des heures : La semaine de 4 jours comme levier d'égalité."," Présenté par Albane Veyron",[1014,1486,1487,1490],{},[119,1488,1489],{},"Créer sa propre VM avec compilation JIT pour les nuls."," Présenté par Olivier Poncet",[1014,1492,1493,1496],{},[119,1494,1495],{},"L'Architecture Hexagonale par la pratique, le live coding qui rendra vos applications plus pérennes."," Présenté par Julien Topçu",[1014,1498,1499,1502],{},[119,1500,1501],{},"Accessibilité du web : du design au code comment tendre vers davantage d'inclusion ?"," Présenté par Marjorie Aubert",[10,1504,1505],{},[13,1506,1507,1509,1510,95],{},[16,1508,18],{},"\nCe ne sont que des conférences que j'ai pu voir (une petite partie de toutes les conférences disponibles). Pour voir le programme complet, rendez-vous sur le ",[145,1511,1514],{"href":1512,"rel":1513},"https:\u002F\u002Fmobile.devoxx.com\u002Fevents\u002Fdevoxxfr2024\u002Fschedule",[149],"programme Devoxx France 2024",[13,1516,1517],{},"Oui, il y a un peu de Java (je suis développeur web faisant du JavaScript) parce que j'aime découvrir d'autres langages et comment ils résolvent des problèmes, leur façon de penser et les outils qu'ils utilisent. En même temps, plus je passe de temps dans le monde du web, plus je pense que je dois apprendre Java car il est très pratique pour les gros projets avec son typage fort et son puissant système d'injection de dépendances.",[13,1519,1520,1521,1524],{},"Cette année, il y a ",[119,1522,1523],{},"une tendance autour des LLM, de l'IA, du RAG",", et comment les intégrer dans votre entreprise. Puisque l'IA est disponible pour tout le monde à bas prix, il y a de plus en plus d'usages (et d'usages réels) de celle-ci. Ce n'est pas seulement pour les grandes entreprises mais aussi pour les petites entreprises et même pour les particuliers. Tant de possibilités, c'est très excitant et de nombreuses conférences le montrent.",[13,1526,1527,1528,1532],{},"À la fin de la journée, toutes ces conférences sont bonnes et vous allez certainement apprendre quelque chose en les visionnant sur la ",[145,1529,1531],{"href":1293,"rel":1530},[149],"chaîne YouTube de Devoxx France",". Allez-y !",[13,1534,1535,1536,1539],{},"Une des parties intéressantes de Devoxx France est les ",[119,1537,1538],{},"exposants",". Il y a de nombreux stands où vous pouvez rencontrer des partenaires, découvrir de nouveaux outils et vous amuser. Cette année, j'ai découvert que je n'avais pas pris beaucoup de temps pour les visiter, mais j'ai trouvé quelques nouveaux outils et projets. L'un d'eux aide les équipes à se mettre d'accord sur les meilleures pratiques et à les suivre, ou un autre qui construit un centre de données utilisant une stack GCP mais sans Google afin d'être conforme au RGPD et de construire un 'cloud de confiance'.",[13,1541,1542],{},[1003,1543],{"alt":1544,"src":1545},"Photo du logo JavaScript construit avec des LEGO sur l'un des stands partenaires.","\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Flego.jpg",[1547,1548,1550],"h3",{"id":1549},"dîner-des-intervenants","Dîner des intervenants",[13,1552,1553],{},"Mercredi soir, j'ai eu la chance, avec tous les autres intervenants, d'assister au dîner des intervenants. C'était un moment privé pour rencontrer les autres intervenants et se détendre avant le reste de l'événement. Je dois admettre que ce n'est pas vraiment ma tasse de thé de parler à des inconnus, mais la nourriture était excellente, donc c'était un beau moment.",[1547,1555,1557],{"id":1556},"mes-conférences-préférées","Mes conférences préférées",[13,1559,1560],{},"Je souhaite vraiment mettre en avant certaines conférences que j'ai beaucoup appréciées et que je recommande à tous (certaines d'entre elles sont vraiment époustouflantes).",[13,1562,1563,1564,1567],{},"La première est la conférence sur le ",[119,1565,1566],{},"RAG"," (Retrieval-Augmented Generation) où j'ai beaucoup appris sur ce concept, comment l'utiliser et sur les frameworks qui facilitent son utilisation. Je pense vraiment que cette technologie est l'avenir, mais ce sera le sujet d'un autre article (je dois encore en apprendre davantage et commencer à l'utiliser).",[13,1569,1570],{},[1003,1571],{"alt":1572,"src":1573},"Photo de la conférence sur le RAG.","\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Frag.jpg",[13,1575,1576,1577,1580],{},"La deuxième est la conférence sur le ",[119,1578,1579],{},"micro front-end",". Sur le papier, le sujet est intéressant mais trop souvent, les conférences sur le micro front-end sont très théoriques, pas très pratiques, et l'utilisation, avec ses avantages, n'est pas claire. Mais, cette conférence était à l'opposé de cela. Ils ont expliqué, en détail, comment ils l'ont mis en œuvre et utilisé et, plus important encore, pourquoi ils l'ont fait. À la fin, le live coding était sur le site web en direct (oui, sur leroymerlin.fr) et c'était très impressionnant.",[13,1582,1583],{},[1003,1584],{"alt":1585,"src":1586},"Photo de la conférence Leroy Merlin sur les micro front-ends.","\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Fmicro-front-end.jpg",[13,1588,1589,1590,1592],{},"La troisième est la conférence qui retrace l'histoire de ",[119,1591,1334],{}," depuis 25 ans. C'était très intéressant de voir comment les technologies successives sont liées entre elles et de comprendre que l'état actuel de DevOps est le fruit d'années de travail, étape par étape. Ce n'est pas une révolution mais une évolution progressive, des machines virtuelles aux conteneurs, orchestrateurs et IaC.",[13,1594,1595,1596,1599],{},"Par hasard, mais parce que j'aime le contenu de la personne sur X, je suis allé à une conférence sur le ",[119,1597,1598],{},"JIT",". Je connaissais ce terme et l'objectif mais pas comment il était implémenté. En 45 minutes, l'intervenant a codé un simple mais fonctionnel compilateur JIT en C++. Cela a presque l'air facile et je pense qu'il est important de comprendre comment ces morceaux de technologie, que nous utilisons chaque jour, fonctionnent.",[13,1601,1602],{},[1003,1603],{"alt":1604,"src":1605},"Photo de la conférence sur le JIT.","\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Fjit.jpg",[13,1607,1608,1609,1612],{},"La dernière portait sur l'",[119,1610,1611],{},"architecture hexagonale",". Je connais déjà le concept, mais je ne l'ai jamais implémenté. L'intervenant a réalisé une session de live coding où il a implémenté une simple application avec une architecture hexagonale. C'était très intéressant de voir comment le code est organisé et à quel point il est facile à tester et à maintenir. Le fait qu'il ait implémenté le domaine (la logique métier) d'abord avec des tests, puis de le connecter à l'infrastructure (le framework) était très agréable à découvrir. Je vais définitivement approfondir ce concept et écrire des articles à ce sujet. Lorsque vous assistez à une conférence comme celle-ci, c'est comme aller au théâtre et voir un film, j'adore cette expérience.",[13,1614,1615],{},"Dans l'ensemble, vous devriez vraiment regarder ces conférences. Elles sont très intéressantes et vous allez beaucoup apprendre.",[13,1617,1618],{},[1003,1619],{"alt":1620,"src":1621},"Photo du grand amphithéâtre Devoxx.","\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Famphi.jpg",[127,1623,1625],{"id":1624},"ma-conférence","Ma conférence",[13,1627,1628],{},"Cette année, j'ai soumis 3 conférences à l'appel à papers (Call For Paper) :",[1011,1630,1631,1637,1643],{},[1014,1632,1633,1636],{},[119,1634,1635],{},"Construire un méta framework front-end pour l'edge"," (en anglais : Building a meta front-end framework for the edge)",[1014,1638,1639,1642],{},[119,1640,1641],{},"Unifié et Universel, le JavaScript avec UnJS"," (en anglais : Unified and Universal, JavaScript with UnJS)",[1014,1644,1645,1648],{},[119,1646,1647],{},"Atteindre l'edge avec Nuxt"," (en anglais : Reaching the edge with Nuxt)",[13,1650,1651],{},"Et l'une d'elles a été acceptée. Youpi ! Il est important de noter que Devoxx France est, à l'origine, une conférence Java, et je suis assez sûr que l'edge est inconnu pour la plupart des participants, ce qui pourrait expliquer pourquoi ces conférences n'ont pas été acceptées.",[13,1653,1654],{},"Mais une a été acceptée et je dois la préparer !",[13,1656,1657],{},"J'ai choisi de parler d'UnJS car j'aime la philosophie qui le sous-tend, et je pense que c'est un très bon outil pour un développeur JavaScript. Parler pendant 15 minutes sur UnJS est également un défi car ce n'est pas beaucoup de temps, et la quantité et la diversité des packages qu'UnJS propose est énorme.",[13,1659,1660],{},"La première étape consiste à choisir les packages que je voulais présenter. Ensuite, je dois sélectionner quelle partie des packages sélectionnés je souhaite présenter, celle qui pourrait être intéressante pour la majorité des participants. C'est beaucoup plus difficile que d'avoir une conférence d'une heure où je pourrais approfondir le sujet, mais c'est un bon exercice d'être concis.",[13,1662,1663],{},"Finalement, j'ai fini par parler de l'histoire et de la philosophie d'UnJS et à présenter des packages utiles pour la plupart des développeurs comme unbuild, nitro ou magic-regexp en allant droit au but pour chacun d'eux. Mon objectif était de donner un bon aperçu d'UnJS et de donner envie aux gens de l'essayer.",[13,1665,1666],{},"Heureusement, j'ai pu m'entraîner à StrasbourgJS. Cela m'a aidé à affiner certaines parties et à être plus confiant.",[1085,1668,1670,1676],{"id":1669},"a1291894-3de4-444e-b49b-a5dec98f3e27",[13,1671,1672,1673,95],{},"Ma conférence a eu lieu vendredi à 12h35, et jusqu'à 12h20, j'étais confiant. J'ai répété ma conférence plusieurs fois, et je connais UnJS. Mais quand je suis entré dans la salle et que je me suis tenu derrière le bureau, le stress est arrivé. Puis, j'ai commencé à parler et tout s'est bien passé. Je suis fier de ma conférence. J'espère vraiment que vous apprécierez la rediffusion sur la ",[145,1674,1531],{"href":1293,"rel":1675},[149],[1134,1677,1678,1683,1686],{"w-full":32,"icon":1305,"text":1306,"to":1307,"target":1308},[13,1679,1680],{},[138,1681,1682],{},"Les diapositives arrivent bientôt.",[13,1684,1685],{},"Une bonne chose faite, et c'est tellement agréable de partager des connaissances avec les autres et de discuter avec eux. Je sens que j'ai encore un long chemin à parcourir avant de réaliser la présentation parfaite, donc je continuerai à soumettre des conférences à des événements et à des meetups.",[1687,1688,1689,1693,1696,1703,1706],"callout-available-for-giving-talks",{},[127,1690,1692],{"id":1691},"enfin","Enfin",[13,1694,1695],{},"Devoxx France est un événement unique. Il y a tellement de conférences, tant de diversité dans les sujets, et tant de personnes que vous apprendrez définitivement quelque chose. Cette année était la plus grande Devoxx France jamais réalisée avec plus de 4000 participants.",[13,1697,1698,1699,1702],{},"Et même si l'événement est physiquement terminé, il continue en ligne avec la ",[145,1700,1295],{"href":1293,"rel":1701},[149],". Donc, si vous ne pouvez pas assister, vous pouvez toujours regarder les conférences !",[13,1704,1705],{},"Merci aux organisateurs et à l'équipe des red coats pour cet événement incroyable. J'espère vous voir l'année prochaine (je travaille déjà sur de nombreuses conférences pour la prochaine édition) !",[13,1707,1708],{},"D'ici là, prenez soin de vous et continuez à apprendre !",{"title":32,"searchDepth":73,"depth":73,"links":1710},[1711,1715],{"id":1311,"depth":73,"text":1312,"children":1712},[1713,1714],{"id":1549,"depth":109,"text":1550},{"id":1556,"depth":109,"text":1557},{"id":1624,"depth":73,"text":1625},"2024-04-22","Découvrez les conférences de Devoxx France 2024 qui ont mis l'accent sur l'IA, le LLM, le RAG, ainsi qu'une ma conférence sur UnJS !",{},"\u002Ffr\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights","---\ncontentId: f3e97a6a-ce47-42b8-8493-06eb37f8e964\ntitle: \"Devoxx France 2024 : Intervention et Faits Marquants\"\ndescription: Découvrez les conférences de Devoxx France 2024 qui ont mis l'accent sur l'IA, le LLM, le RAG, ainsi qu'une ma conférence sur UnJS !\ndate: 2024-04-22\n---\n\nDevoxx France est une grande conférence qui se tient à Paris. Cette année, plus de **4500 participants** étaient présents avec 70 exposants et **319 intervenants**.\n\nC'est si vaste qu'il est impossible d'assister à toutes les conférences. Parfois, il y a plus de 10 conférences en même temps, mais grâce à la [rediffusion sur YouTube](https:\u002F\u002Fwww.youtube.com\u002F@DevoxxFRvideos), il est possible de les regarder plus tard.\n\n![Photo du hall d'exposition et de mon badge d'intervenant.](\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Ffirst-day.jpg)\n\n\u003CCallout w-full icon=\"i-simple-icons-youtube\" text=\"Regardez ma conférence sur UnJS\" to=\"https:\u002F\u002Fyoutu.be\u002F0BApl8r1VWc\" target=\"_blank\" \u002F>\n\n## Mon emploi du temps\n\n> [!NOTE]\n> Ce n'est pas une recommandation, ce sont simplement des conférences que j'ai pu voir.\n\nAvant de me rendre à Devoxx France, j'ai consulté le [programme](https:\u002F\u002Fmobile.devoxx.com\u002F) et j'ai dressé une liste des conférences que je voulais suivre. Il y a tellement de monde que certaines conférences étaient déjà complètes lorsque je suis arrivé dans la salle, et j'ai découvert d'autres conférences que j'ai préférées durant l'événement (et choisir parmi toutes ces conférences n'est pas facile).\n\nCette année, mon objectif était de voir un maximum de conférences sur **DevOps** et **le code propre**. Je voulais également être surpris en assistant à des conférences que je n'aurais jamais suivies simplement parce que je connais l'intervenant ou parce que le titre est intéressant (et je n'ai pas été déçu).\n\nEnfin, j'ai pu voir (les titres de conférences sont en français) :\n\n- Mercredi 17 avril\n  - **IA en médecine : où en sommes-nous ?** Présenté par Jean-Emmanuel Bibault\n  - **React Server Components : Effet de mode ou réel progrès ?** Présenté par Thomas Simonnet\n  - **DDD Haute Vitesse (revisité).** Présenté par Thomas Pierrain\n  - **V, comme Vautledétour.** Présenté par Emmanuel Remy\n  - **Comment bien planter un side project ?** Présenté par David Laizé\n  - **Toutes et tous Mercenaires de DevOps!** Présenté par Arnaud Héritier, Henri Gomez, Pierre-Antoine Grégoire, Dimitri Baeli et Gildas Cuisinier\n  - **La recherche sous stéroïdes - une histoire de sémantique.** Présenté par Mathilde Rigabert et Martin Labenne\n- Jeudi 18 avril\n  - **Les plus grandes erreurs de programmation.** Présenté par Mark Rendle\n  - **Un monde shooté aux métaux.** Présenté par Guillaume Pitron et Agnes Crepet\n  - **GatewayAPI, 10 ans de maturation pour une nouvelle API Kubernetes.** Présenté par Kevin Davin\n  - **Comment K8S a changé le monde de l'Ops.** Présenté par Aurélien Moreau et Loïc Ortola\n  - **Architecture Hexagonale : Comment venir à bout du code spaghetti ?** Présenté par Kévin LLOPIS\n  - **Java rencontre l'IA : Comment intégrer les LLMs dans vos applications avec LangChain4j.** Présenté par Lize Raes\n  - **Les nouveautés de Java 21.** Présenté par Jean-Michel Doudoux\n  - **Débugguez votre salaire ! Mes stratégies gagnantes pour réussir sa négociation salariale.** Présenté par Shirley Almosni-Chiche\n- Vendredi 19 avril\n  - **Comment modéliser l'état du monde en 2100 ?** Le Rapport Meadows. Présenté par Anatole Chouard\n  - **Cybersécurité et cyberdéfense : un sujet géopolitique.** Présenté par Guillaume Poupard\n  - **Model Mitosis : ne plus se tromper entre les microservices et le monolithe.** Présenté par Julien Topçu et Josian Chevalier\n  - **L'architecture micro frontend : comment transformer son site web en puzzle géant collaboratif.** Présenté par Maxime Ribera et Ludovic Lagatie\n  - **Unifié et Universel, le JavaScript avec UnJS.** Présenté par Estéban Soubiran (c'est moi)\n  - **Au-delà des heures : La semaine de 4 jours comme levier d'égalité.** Présenté par Albane Veyron\n  - **Créer sa propre VM avec compilation JIT pour les nuls.** Présenté par Olivier Poncet\n  - **L'Architecture Hexagonale par la pratique, le live coding qui rendra vos applications plus pérennes.** Présenté par Julien Topçu\n  - **Accessibilité du web : du design au code comment tendre vers davantage d'inclusion ?** Présenté par Marjorie Aubert\n\n> [!NOTE]\n> Ce ne sont que des conférences que j'ai pu voir (une petite partie de toutes les conférences disponibles). Pour voir le programme complet, rendez-vous sur le [programme Devoxx France 2024](https:\u002F\u002Fmobile.devoxx.com\u002Fevents\u002Fdevoxxfr2024\u002Fschedule).\n\nOui, il y a un peu de Java (je suis développeur web faisant du JavaScript) parce que j'aime découvrir d'autres langages et comment ils résolvent des problèmes, leur façon de penser et les outils qu'ils utilisent. En même temps, plus je passe de temps dans le monde du web, plus je pense que je dois apprendre Java car il est très pratique pour les gros projets avec son typage fort et son puissant système d'injection de dépendances.\n\nCette année, il y a **une tendance autour des LLM, de l'IA, du RAG**, et comment les intégrer dans votre entreprise. Puisque l'IA est disponible pour tout le monde à bas prix, il y a de plus en plus d'usages (et d'usages réels) de celle-ci. Ce n'est pas seulement pour les grandes entreprises mais aussi pour les petites entreprises et même pour les particuliers. Tant de possibilités, c'est très excitant et de nombreuses conférences le montrent.\n\nÀ la fin de la journée, toutes ces conférences sont bonnes et vous allez certainement apprendre quelque chose en les visionnant sur la [chaîne YouTube de Devoxx France](https:\u002F\u002Fwww.youtube.com\u002F@DevoxxFRvideos). Allez-y !\n\nUne des parties intéressantes de Devoxx France est les **exposants**. Il y a de nombreux stands où vous pouvez rencontrer des partenaires, découvrir de nouveaux outils et vous amuser. Cette année, j'ai découvert que je n'avais pas pris beaucoup de temps pour les visiter, mais j'ai trouvé quelques nouveaux outils et projets. L'un d'eux aide les équipes à se mettre d'accord sur les meilleures pratiques et à les suivre, ou un autre qui construit un centre de données utilisant une stack GCP mais sans Google afin d'être conforme au RGPD et de construire un 'cloud de confiance'.\n\n![Photo du logo JavaScript construit avec des LEGO sur l'un des stands partenaires.](\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Flego.jpg)\n\n### Dîner des intervenants\n\nMercredi soir, j'ai eu la chance, avec tous les autres intervenants, d'assister au dîner des intervenants. C'était un moment privé pour rencontrer les autres intervenants et se détendre avant le reste de l'événement. Je dois admettre que ce n'est pas vraiment ma tasse de thé de parler à des inconnus, mais la nourriture était excellente, donc c'était un beau moment.\n\n### Mes conférences préférées\n\nJe souhaite vraiment mettre en avant certaines conférences que j'ai beaucoup appréciées et que je recommande à tous (certaines d'entre elles sont vraiment époustouflantes).\n\nLa première est la conférence sur le **RAG** (Retrieval-Augmented Generation) où j'ai beaucoup appris sur ce concept, comment l'utiliser et sur les frameworks qui facilitent son utilisation. Je pense vraiment que cette technologie est l'avenir, mais ce sera le sujet d'un autre article (je dois encore en apprendre davantage et commencer à l'utiliser).\n\n![Photo de la conférence sur le RAG.](\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Frag.jpg)\n\nLa deuxième est la conférence sur le **micro front-end**. Sur le papier, le sujet est intéressant mais trop souvent, les conférences sur le micro front-end sont très théoriques, pas très pratiques, et l'utilisation, avec ses avantages, n'est pas claire. Mais, cette conférence était à l'opposé de cela. Ils ont expliqué, en détail, comment ils l'ont mis en œuvre et utilisé et, plus important encore, pourquoi ils l'ont fait. À la fin, le live coding était sur le site web en direct (oui, sur leroymerlin.fr) et c'était très impressionnant.\n\n![Photo de la conférence Leroy Merlin sur les micro front-ends.](\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Fmicro-front-end.jpg)\n\nLa troisième est la conférence qui retrace l'histoire de **DevOps** depuis 25 ans. C'était très intéressant de voir comment les technologies successives sont liées entre elles et de comprendre que l'état actuel de DevOps est le fruit d'années de travail, étape par étape. Ce n'est pas une révolution mais une évolution progressive, des machines virtuelles aux conteneurs, orchestrateurs et IaC.\n\nPar hasard, mais parce que j'aime le contenu de la personne sur X, je suis allé à une conférence sur le **JIT**. Je connaissais ce terme et l'objectif mais pas comment il était implémenté. En 45 minutes, l'intervenant a codé un simple mais fonctionnel compilateur JIT en C++. Cela a presque l'air facile et je pense qu'il est important de comprendre comment ces morceaux de technologie, que nous utilisons chaque jour, fonctionnent.\n\n![Photo de la conférence sur le JIT.](\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Fjit.jpg)\n\nLa dernière portait sur l'**architecture hexagonale**. Je connais déjà le concept, mais je ne l'ai jamais implémenté. L'intervenant a réalisé une session de live coding où il a implémenté une simple application avec une architecture hexagonale. C'était très intéressant de voir comment le code est organisé et à quel point il est facile à tester et à maintenir. Le fait qu'il ait implémenté le domaine (la logique métier) d'abord avec des tests, puis de le connecter à l'infrastructure (le framework) était très agréable à découvrir. Je vais définitivement approfondir ce concept et écrire des articles à ce sujet. Lorsque vous assistez à une conférence comme celle-ci, c'est comme aller au théâtre et voir un film, j'adore cette expérience.\n\nDans l'ensemble, vous devriez vraiment regarder ces conférences. Elles sont très intéressantes et vous allez beaucoup apprendre.\n\n![Photo du grand amphithéâtre Devoxx.](\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights\u002Famphi.jpg)\n\n## Ma conférence\n\nCette année, j'ai soumis 3 conférences à l'appel à papers (Call For Paper) :\n\n- **Construire un méta framework front-end pour l'edge** (en anglais : Building a meta front-end framework for the edge)\n- **Unifié et Universel, le JavaScript avec UnJS** (en anglais : Unified and Universal, JavaScript with UnJS)\n- **Atteindre l'edge avec Nuxt** (en anglais : Reaching the edge with Nuxt)\n\nEt l'une d'elles a été acceptée. Youpi ! Il est important de noter que Devoxx France est, à l'origine, une conférence Java, et je suis assez sûr que l'edge est inconnu pour la plupart des participants, ce qui pourrait expliquer pourquoi ces conférences n'ont pas été acceptées.\n\nMais une a été acceptée et je dois la préparer !\n\nJ'ai choisi de parler d'UnJS car j'aime la philosophie qui le sous-tend, et je pense que c'est un très bon outil pour un développeur JavaScript. Parler pendant 15 minutes sur UnJS est également un défi car ce n'est pas beaucoup de temps, et la quantité et la diversité des packages qu'UnJS propose est énorme.\n\nLa première étape consiste à choisir les packages que je voulais présenter. Ensuite, je dois sélectionner quelle partie des packages sélectionnés je souhaite présenter, celle qui pourrait être intéressante pour la majorité des participants. C'est beaucoup plus difficile que d'avoir une conférence d'une heure où je pourrais approfondir le sujet, mais c'est un bon exercice d'être concis.\n\nFinalement, j'ai fini par parler de l'histoire et de la philosophie d'UnJS et à présenter des packages utiles pour la plupart des développeurs comme unbuild, nitro ou magic-regexp en allant droit au but pour chacun d'eux. Mon objectif était de donner un bon aperçu d'UnJS et de donner envie aux gens de l'essayer.\n\nHeureusement, j'ai pu m'entraîner à StrasbourgJS. Cela m'a aidé à affiner certaines parties et à être plus confiant.\n\n\u003CCalloutReadMore id=\"a1291894-3de4-444e-b49b-a5dec98f3e27\" \u002F>\n\nMa conférence a eu lieu vendredi à 12h35, et jusqu'à 12h20, j'étais confiant. J'ai répété ma conférence plusieurs fois, et je connais UnJS. Mais quand je suis entré dans la salle et que je me suis tenu derrière le bureau, le stress est arrivé. Puis, j'ai commencé à parler et tout s'est bien passé. Je suis fier de ma conférence. J'espère vraiment que vous apprécierez la rediffusion sur la [chaîne YouTube de Devoxx France](https:\u002F\u002Fwww.youtube.com\u002F@DevoxxFRvideos).\n\n\u003CCallout w-full icon=\"i-simple-icons-youtube\" text=\"Regardez ma conférence sur UnJS\" to=\"https:\u002F\u002Fyoutu.be\u002F0BApl8r1VWc\" target=\"_blank\" \u002F>\n\n_Les diapositives arrivent bientôt._\n\nUne bonne chose faite, et c'est tellement agréable de partager des connaissances avec les autres et de discuter avec eux. Je sens que j'ai encore un long chemin à parcourir avant de réaliser la présentation parfaite, donc je continuerai à soumettre des conférences à des événements et à des meetups.\n\n\u003CCalloutAvailableForGivingTalks \u002F>\n\n## Enfin\n\nDevoxx France est un événement unique. Il y a tellement de conférences, tant de diversité dans les sujets, et tant de personnes que vous apprendrez définitivement quelque chose. Cette année était la plus grande Devoxx France jamais réalisée avec plus de 4000 participants.\n\nEt même si l'événement est physiquement terminé, il continue en ligne avec la [rediffusion sur YouTube](https:\u002F\u002Fwww.youtube.com\u002F@DevoxxFRvideos). Donc, si vous ne pouvez pas assister, vous pouvez toujours regarder les conférences !\n\nMerci aux organisateurs et à l'équipe des red coats pour cet événement incroyable. J'espère vous voir l'année prochaine (je travaille déjà sur de nombreuses conférences pour la prochaine édition) !\n\nD'ici là, prenez soin de vous et continuez à apprendre !\n",{"title":1275,"description":1717},{"loc":1719,"images":1723},[1724,1725,1726,1727,1728,1729],{"loc":1302},{"loc":1545},{"loc":1573},{"loc":1586},{"loc":1605},{"loc":1621},"fr\u002Fposts\u002Fspeaking-at-devoxx-france-2024-insights-and-highlights","TgzmwtqXGSSA-0EHXHvSy28Bq2fdTOIuCeANoLN8mY8",1790086904194]