{"id":230329,"date":"2022-11-27T14:23:00","date_gmt":"2022-11-27T11:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230329"},"modified":"2022-11-27T14:33:26","modified_gmt":"2022-11-27T11:33:26","slug":"ecrire-des-tests-unitaires-avec-phpunit-partie-2-le-demontage","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/ecrire-des-tests-unitaires-avec-phpunit-partie-2-le-demontage\/","title":{"rendered":"\u00c9crire des tests unitaires avec PHPUnit, partie 2\u00a0: le d\u00e9montage"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/ecrire-des-tests-unitaires-avec-phpunit-partie-1-la-configuration\/\" title=\"\u00c0 la fin du mois dernier\">\u00c0 la fin du mois dernier<\/a><\/strong>, j&rsquo;ai commenc\u00e9 \u00e0 parler de l&rsquo;\u00e9criture de tests unitaires dans PHPUnit pour du code bas\u00e9 sur WordPress. Cela incluait principalement l&rsquo;id\u00e9e de configurer <strong><a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPUnit<\/a><\/strong>, la <strong>fonction setUp<\/strong> et d&rsquo;\u00e9crire des tests de base.<\/p>\n<p>Cela n&rsquo;a cependant pas discut\u00e9 de ce que je sais de la fonction <strong>tearDown<\/strong> qui est toujours une caract\u00e9ristique importante de l&rsquo;\u00e9criture \u00e0 l&rsquo;aide de tests. De plus, il existe \u00e9galement deux fa\u00e7ons d&rsquo;envisager l&rsquo;\u00e9criture de tests pour les projets WordPress.<\/p>\n<p>\u00c0 savoir:<\/p>\n<ol>\n<li>\u00e9crire des tests sp\u00e9cifiquement pour les plugins et les fonctionnalit\u00e9s de la couche application,<\/li>\n<li>ex\u00e9cuter des tests unitaires sur l&rsquo;application WordPress.<\/li>\n<\/ol>\n<p>Avant d&rsquo;aller de l&rsquo;avant avec ce post particulier, cependant, je vous recommande de rattraper ce que j&rsquo;ai couvert jusqu&rsquo;\u00e0 pr\u00e9sent. Cela inclut les messages suivants\u00a0:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/un-environnement-de-developpement-wordpress-a-laide-dun-gestionnaire-de-packages\/\" title=\"Un environnement de d\u00e9veloppement WordPress (\u00e0 l&#039;aide d&#039;un gestionnaire de packages)\">Un environnement de d\u00e9veloppement WordPress (\u00e0 l&rsquo;aide d&rsquo;un gestionnaire de packages)<\/a><\/strong><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/un-ide-pour-le-developpement-wordpress-independamment-de-lexperience\/\" title=\"Un IDE pour le d\u00e9veloppement WordPress\">Un IDE pour le d\u00e9veloppement WordPress<\/a><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/utilisation-des-parametres-utilisateur-dans-visual-studio-code\/\" title=\"Utilisation des param\u00e8tres utilisateur dans Visual Studio Code\">Utilisation des param\u00e8tres utilisateur dans Visual Studio Code<\/a><\/strong><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/ecrire-des-tests-unitaires-avec-phpunit-partie-1-la-configuration\/\" title=\"\u00c9crire des tests unitaires avec PHPUnit, partie 1\u00a0: la configuration\">\u00c9crire des tests unitaires avec PHPUnit, partie 1\u00a0: la configuration<\/a><\/li>\n<\/ol>\n<p>Une fois que vous avez fait cela, revenez \u00e0 ce post et continuons \u00e0 discuter de la fonction tearDown et \u00e0 quoi ressemblent r\u00e9ellement les tests unitaires dans le contexte de WordPress.<\/p>\n<h2>Tests unitaires avec PHPUnit, partie 2\u00a0: le d\u00e9montage<\/h2>\n<p>Avant d&rsquo;aller plus loin, souvenez-vous que les d\u00e9veloppeurs traitent souvent la fonction <strong>setUp<\/strong> comme un constructeur et la fonction <strong>tearDown<\/strong> comme un destructeur ; cependant, rappelez-vous que ce dernier n&rsquo;est pas toujours n\u00e9cessaire.<\/p>\n<p>Voici une bonne r\u00e8gle \u00e0 retenir\u00a0:<\/p>\n<ul>\n<li>Tout ce dont une fonction de test a besoin appellera la fonction <strong>setUp<\/strong> afin que les classes n\u00e9cessaires soient n\u00e9cessaires.<\/li>\n<li>La fonction <strong>tearDown<\/strong> n&rsquo;est pas toujours n\u00e9cessaire puisque la fonction <strong>setUp<\/strong> peut r\u00e9initialiser une classe.<\/li>\n<\/ul>\n<p>Alors qu&rsquo;est-ce que cela signifie pour la fonction <strong>tearDown<\/strong> si elle ne r\u00e9initialise pas les donn\u00e9es cr\u00e9\u00e9es pendant la fonction <strong>setUp<\/strong>\u00a0?<\/p>\n<h3>1 La fonction de d\u00e9montage<\/h3>\n<p>Le meilleur conseil que je puisse donner concernant la fonction <strong>tearDown<\/strong> est qu&rsquo;elle doit \u00eatre utilis\u00e9e si quelque chose est configur\u00e9 pendant l&rsquo;un des tests qui reste.<\/p>\n<p>Cela peut \u00eatre quelque chose qui est \u00e9crit dans une base de donn\u00e9es, quelque chose qui est \u00e9crit dans un journal ou, plus g\u00e9n\u00e9ralement, quelque chose qui est \u00e9crit sur le disque dur.<\/p>\n<p>Ainsi, si un test \u00e9crit un enregistrement ou un fichier, la m\u00e9thode <strong>tearDown<\/strong> s&rsquo;ex\u00e9cutera apr\u00e8s un test et devrait supprimer tout test enregistr\u00e9 sur le lecteur qui ne fait pas partie du test mais qui n&rsquo;est pas n\u00e9cessaire en permanence pour le prochain test ou qui doit \u00eatre nettoy\u00e9 apr\u00e8s lui-m\u00eame.<\/p>\n<p>Donc, dans un sens, c&rsquo;est comme un <strong><a href=\"http:\/\/en.cppreference.com\/w\/cpp\/language\/destructor\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">destructeur<\/a><\/strong>, mais si vous n&rsquo;avez jamais utilis\u00e9 un langage qui a un destructeur, cette nomenclature semble non pertinente ou n&rsquo;a pas de sens.<\/p>\n<blockquote>\n<p>Un <strong>destructeur<\/strong> est une fonction membre sp\u00e9ciale qui est appel\u00e9e lorsque la dur\u00e9e de vie d&rsquo;un objet se termine. Le but du <strong>destructeur<\/strong> est de lib\u00e9rer les ressources que l&rsquo;objet a pu acqu\u00e9rir au cours de sa vie.<\/p>\n<\/blockquote>\n<p>Ainsi, il vaut peut-\u00eatre mieux penser simplement \u00e0 la fonction comme un moyen de nettoyer apr\u00e8s un test (et non dans le sens de d\u00e9finir une variable \u00e9gale \u00e0 null puisque la fonction <strong>setUp<\/strong> peut le faire).<\/p>\n<h3>2 tests unitaires pour les projets WordPress<\/h3>\n<p>Lors de l&rsquo;\u00e9criture de tests unitaires pour des projets WordPress, nous devons nous assurer que nous sommes clairs sur le type de tests unitaires dont nous parlons.<\/p>\n<p>Par exemple, ce que j&rsquo;appellerai les tests unitaires classiques ou standard suivent la m\u00e9thodologie de \u00abd\u00e9veloppement pilot\u00e9 par les tests\u00bb dont je parlerai dans un instant. D&rsquo;autre part, WordPress a son propre ensemble de tests unitaires pour les th\u00e8mes et autres dont je parlerai \u00e9galement un peu plus tard dans cet article.<\/p>\n<p>Mais pour cette section, j&rsquo;ai pens\u00e9 qu&rsquo;il pourrait \u00eatre utile de parler un peu du premier plut\u00f4t que du second afin que vous puissiez voir comment cela pourrait fonctionner.<\/p>\n<p>Dans l&rsquo;exemple ci-dessous, j&rsquo;\u00e9cris des tests sur un plug-in charg\u00e9 de communiquer avec une API tierce. Ce plugin particulier n\u00e9cessite un nom d&rsquo;utilisateur et un mot de passe ou une API <strong>et<\/strong> nous voulons nous assurer que, pour les besoins de cet article, il r\u00e9cup\u00e8re correctement une erreur chaque fois que le test est ex\u00e9cut\u00e9.<\/p>\n<p>Notez qu&rsquo;en parcourant ce code, vous allez me voir parler un peu de r\u00e9flexion. Je vais bient\u00f4t faire un article complet sur PHP Reflection afin de faire la lumi\u00e8re l\u00e0-dessus.<\/p>\n<p>Pour le code ci-dessous, cependant, supposons que c&rsquo;est un moyen d&rsquo;acc\u00e9der \u00e0 des propri\u00e9t\u00e9s qui sont autrement marqu\u00e9es comme priv\u00e9es.<\/p>\n<p>Rappel du dernier article de cette s\u00e9rie, nous avons eu un premier test qui ressemblait <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/248c7741273e6be414c1f98c11085fe7#file-01-acme-cache-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci\u00a0:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nuse PHPUnitFrameworkTestCase;\n\nclass AcmeCacheTest extends TestCase\n{\n  protected $cache;\n\n  protected function setUp()\n  {\n    $this-&gt;cache = new AcmeCache();\n  }\n\n  public function testDefaultDuration()\n  {\n    $this-&gt;assertTrue($this-&gt;cache-&gt;getDuration() === 43200);\n  }\n\n  public function testNewDuration()\n  {\n    $this-&gt;cache-&gt;setDuration(1000);\n\n    $this-&gt;assertFalse($this-&gt;cache-&gt;getDuration() === 43200);\n    $this-&gt;assertTrue($this-&gt;cache-&gt;getDuration() === 1000);\n  }\n\n  \/\/ More to come...\n}<\/code><\/pre>\n<p>Remarquez, cependant, dans ce test, il n&rsquo;y a pas de fonction <strong>tearDown<\/strong> qui a du sens, n&rsquo;est-ce pas\u00a0? Apr\u00e8s tout, rien n&rsquo;est \u00e9crit dans une base de donn\u00e9es ou dans un fichier.<\/p>\n<p>Mais disons que nous voulons introduire un cas de test qui va avoir un nom de fichier, un contenu et qui va \u00e9crire le contenu dans le fichier. Dans ce cas, il s&rsquo;agira de donn\u00e9es statiques, mais cela pourrait techniquement \u00eatre tout ce qui est \u00e9crit sur le disque.<\/p>\n<h4>1 Configuration du test<\/h4>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-00-initial-set-up-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tout<\/a><\/strong> d&rsquo;abord, nous voulons configurer le test en d\u00e9finissant le nom du fichier, le contenu du fichier et en pr\u00e9parant les propri\u00e9t\u00e9s.<\/p>\n<pre><code>&lt;?php\n\nnamespace PresswareAcmeTestsAPI;\n\nuse PHPUnitFrameworkTestCase;\n\nclass AcmeFileTest extends TestCase\n{\n\n  private $filename;\n\n  private $content;\n\n  public function setUp()\n  {\n    $this-&gt;filename = 'testFile.txt';\n    $this-&gt;content = 'This is a string of data that is meant to be written to the file.';\n  }\n\n  \/\/ More to come...\n}\n<\/code><\/pre>\n<p>Assez facile, non ?<\/p>\n<h4>2 \u00c9crire et lire des donn\u00e9es<\/h4>\n<p>Ensuite, nous voulons \u00e9crire les donn\u00e9es, lire les donn\u00e9es et affirmer que le contenu <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-01-testing-contents-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">est le m\u00eame.<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace PresswareAcmeTestsAPI;\n\nuse PHPUnitFrameworkTestCase;\n\nclass AcmeFileTest extends TestCase\n{\n\n  private $filename;\n\n  private $content;\n\n  public function setUp()\n  {\n    $this-&gt;filename = 'testFile.txt';\n    $this-&gt;content = 'This is a string of data that is meant to be written to the file.';\n  }\n\n  public function testWriteReadData()\n  {    \n    \/\/ Writes the content to the file with the given filename.\n    $fileHandle = fopen($this-&gt;filename, 'w');\n    fwrite($fileHandle, $this-&gt;content);\n    fclose($fileHandle);\n\n    \/\/ Reads the contents of the file that was just written\n    $fileHandle = fopen($this-&gt;filename, 'r');\n    $contents = fread($fileHandle, filesize($this-&gt;filename));\n    fclose($fileHandle);\n\n    $this-&gt;assertSame($this-&gt;content, $contents);\n  }\n\n  \/\/ More to come..\n}\n<\/code><\/pre>\n<p>\u00c0 ce stade, si vous ex\u00e9cutez le test (que je n&rsquo;ai pas encore couvert techniquement sur la fa\u00e7on de le faire), vous remarquerez que <strong>testFile.txt<\/strong> r\u00e9side toujours sur votre syst\u00e8me.<\/p>\n<h4>3 Utiliser le d\u00e9montage<\/h4>\n<p>Enfin, nous devons travailler avec la m\u00e9thode <strong>tearDown<\/strong> pour nous assurer que le fichier est supprim\u00e9 \u00e0 la fin du test unitaire. <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-02-full-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Voici \u00e0 quoi cela peut ressembler<\/a><\/strong> si vous avez impl\u00e9ment\u00e9 votre code comme ce que vous voyez ci-dessus.<\/p>\n<pre><code>&lt;?php\n\nnamespace PresswareAcmeTestsAPI;\n\nuse PHPUnitFrameworkTestCase;\n\nclass AcmeFileTest extends TestCase\n{\n\n  private $filename;\n\n  private $content;\n\n  public function setUp()\n  {\n    $this-&gt;filename = 'testFile.txt';\n    $this-&gt;content = 'This is a string of data that is meant to be written to the file.';\n  }\n\n  public function testWriteReadData()\n  {    \n    \/\/ Writes the content to the file with the given filename.\n    $fileHandle = fopen($this-&gt;filename, 'w');\n    fwrite($fileHandle, $this-&gt;content);\n    fclose($fileHandle);\n\n    \/\/ Reads the contents of the file that was just written\n    $fileHandle = fopen($this-&gt;filename, 'r');\n    $contents = fread($fileHandle, filesize($this-&gt;filename));\n    fclose($fileHandle);\n\n    $this-&gt;assertSame($this-&gt;content, $contents);\n  }\n\n  public function tearDown()\n  {\n    if (file_exists($this-&gt;filename)) {\n      unlink($this-&gt;filename);\n    }\n  }\n}\n<\/code><\/pre>\n<p>Notez que dans la m\u00e9thode <strong>tearDown<\/strong>, je v\u00e9rifie d&rsquo;abord si un <a href=\"https:\/\/php.net\/manual\/en\/function.file-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">file_exists<\/a>. En effet, si vous essayez simplement de <a href=\"https:\/\/php.net\/manual\/en\/function.unlink.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dissocier<\/a> un fichier qui n&rsquo;est pas pr\u00e9sent, vous obtiendrez une erreur lors de l&rsquo;ex\u00e9cution de vos tests, car si <strong>tearDown<\/strong> est pr\u00e9sent, il essaiera de supprimer quelque chose apr\u00e8s chaque fonction de test. Et si le fichier n&rsquo;existe pas, alors il n&rsquo;y a rien \u00e0 supprimer, et il en r\u00e9sultera donc un probl\u00e8me.<\/p>\n<p>Donc, pour tenter d&rsquo;\u00e9crire du code de mani\u00e8re d\u00e9fensive, je pense qu&rsquo;il est responsable de v\u00e9rifier si le fichier existe avant d&rsquo;essayer de le supprimer.<\/p>\n<h3>3 Ordre des op\u00e9rations<\/h3>\n<p>En ce qui concerne les tests unitaires purs, vous allez normalement lire ceci en termes de <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Test-driven_development\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">d\u00e9veloppement pilot\u00e9 par les tests<\/a><\/strong>. C&rsquo;est un grand sujet en soi; cependant, il convient de le mentionner ici si vous choisissez de le rechercher plus avant et m\u00eame de l&rsquo;impl\u00e9menter dans vos efforts de d\u00e9veloppement.<\/p>\n<p>L&rsquo;id\u00e9e g\u00e9n\u00e9rale derri\u00e8re cette approche est souvent appel\u00e9e &quot;r\u00e9p\u00e9tition rouge-vert&quot;. Et je ne le nie pas, il y a quelque chose dans cette approche. \u00c0 savoir, cela vous permet, en tant que d\u00e9veloppeur, d&rsquo;\u00e9crire du code tel que vous vous attendez \u00e0 ce qu&rsquo;il fonctionne avant d&rsquo;\u00e9crire r\u00e9ellement le code.<\/p>\n<p>La psychologie sous-jacente est la suivante\u00a0: si vous savez comment fonctionne le code, vous \u00eates plus susceptible d&rsquo;\u00e9crire des tests qui r\u00e9ussissent\u00a0; tandis que si vous \u00e9crivez des tests sur la fa\u00e7on dont le code doit fonctionner, vous devriez \u00e9crire un meilleur code.<\/p>\n<p>Malheureusement, nous n&rsquo;avons pas toujours ce luxe. Mais cela ne signifie pas que nous devrions jeter le proverbial b\u00e9b\u00e9 avec l&rsquo;eau. Au lieu de cela, je suis d&rsquo;avis que vous devriez \u00e9crire des tests quand vous le pouvez et \u00e9crire le code ensuite ; sinon, \u00e9crivez vos tests apr\u00e8s votre code.<\/p>\n<p>En fin de compte, avoir des tests en place malgr\u00e9 tout vaudra mieux que pas de tests du tout.<\/p>\n<h3>4 Test avec WordPress<\/h3>\n<p>En ce qui concerne les tests unitaires dans WordPress, vous \u00eates probablement tomb\u00e9 sur certaines choses. Parfois, le contenu est un terme impropre ou peut m\u00eame \u00eatre trompeur en termes de &quot;tests unitaires dans WordPress&quot;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164139-61e75e67162bf.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164139-61e75e67162bf.png\" alt=\"\u00c9crire des tests unitaires avec PHPUnit, partie 2\u00a0: le d\u00e9montage\"><\/a><\/p>\n<p>Par exemple, il y a deux choses \u00e0 noter :<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Theme_Unit_Test\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Le test unitaire th\u00e9matique<\/a><\/strong>. Cet ensemble particulier de contenu est destin\u00e9 \u00e0 aider les d\u00e9veloppeurs de th\u00e8mes \u00e0 tester tous les cas majeurs et mineurs pour leurs th\u00e8mes. Il n&rsquo;y a pas d&rsquo;outils automatis\u00e9s, par exemple, que vous utiliseriez comme dans ce dont nous avons discut\u00e9 ci-dessus.<\/li>\n<li><strong><a href=\"https:\/\/make.wordpress.org\/core\/handbook\/testing\/automated-testing\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tests automatis\u00e9s<\/a><\/strong>. WordPress est livr\u00e9 avec son propre ensemble de tests unitaires afin que nous n&rsquo;ayons pas \u00e0 \u00e9crire de tests sur la plupart des fonctionnalit\u00e9s de WordPress (comme si les fonctions API fonctionnent ou non comme pr\u00e9vu). Cela nous permet de nous concentrer sur l&rsquo;\u00e9criture de tests unitaires pour notre propre logique de domaine.<\/li>\n<li><strong><a href=\"https:\/\/make.wordpress.org\/cli\/handbook\/plugin-unit-tests\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tests unitaires des plugins<\/a><\/strong>. Si vous avez utilis\u00e9 WP-CLI (ou si vous y \u00eates int\u00e9ress\u00e9), vous avez probablement lu cette page ou m\u00eame utilis\u00e9 cet outil. C&rsquo;est utile, mais cela cible \u00e9galement des aspects sp\u00e9cifiques du test des plugins WordPress.<\/li>\n<\/ol>\n<p>Tout ce qui pr\u00e9c\u00e8de est une information utile, et je ne dis pas qu&rsquo;il faut l&rsquo;ignorer. Au lieu de cela, il devrait \u00eatre coupl\u00e9 avec le reste des informations utilis\u00e9es tout au long de cet article.<\/p>\n<h2>Ex\u00e9cution de tests unitaires<\/h2>\n<p>Dans le prochain article, je vous expliquerai tout ce que vous devez savoir pour configurer un fichier XML qui informera PHPUnit de l&#8217;emplacement des tests et de la mani\u00e8re de les ex\u00e9cuter.<\/p>\n<p>Pour l&rsquo;instant, cependant, passez en revue le code contenu dans cet article et pr\u00e9parez-vous \u00e0 en tirer parti dans le prochain article de cette s\u00e9rie.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un tutoriel sur la fa\u00e7on d&rsquo;\u00e9crire des tests unitaires qui exploitent correctement les m\u00e9thodes setUp et tearDown de PHPUnit.<\/p>\n","protected":false},"author":1,"featured_media":164140,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717,801,841],"tags":[1167],"class_list":["post-230329","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-php-3","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=230329"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230329\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/164140"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}