{"id":229917,"date":"2022-11-27T15:06:00","date_gmt":"2022-11-27T12:06:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229917"},"modified":"2022-11-27T15:07:11","modified_gmt":"2022-11-27T12:07:11","slug":"kirjutamisosa-testid-phpunitiga-2-osa-rebimine","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kirjutamisosa-testid-phpunitiga-2-osa-rebimine\/","title":{"rendered":"Kirjutamisosa testid PHPUnitiga, 2. osa: Rebimine"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/kirjutamisueksuse-testid-phpunitiga-1-osa-seadistamine\/\" title=\"Eelmise kuu l\u00f5pus\">Eelmise kuu l\u00f5pus<\/a><\/strong> hakkasin r\u00e4\u00e4kima \u00fchikutestide kirjutamisest PHPUnitis WordPressi-p\u00f5hise koodi jaoks. <strong><a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">See h\u00f5lmas peamiselt PHPUniti<\/a><\/strong> seadistamise ideed, h\u00e4\u00e4lestusfunktsiooni jap\u00f5hitestide <strong>kirjutamist<\/strong>.<\/p>\n<p>See aga ei k\u00e4sitlenud seda, mida ma tean <strong>tearDown<\/strong> funktsiooni kohta, mis on endiselt oluline testide abil kirjutamise funktsioon. Lisaks on WordPressi projektide jaoks testide kirjutamiseks kaks v\u00f5imalust.<\/p>\n<p>Nimelt:<\/p>\n<ol>\n<li>spetsiaalselt pistikprogrammide ja rakenduskihi funktsioonide jaoks m\u00f5eldud testide kirjutamine,<\/li>\n<li>WordPressi rakenduse \u00fcksusetestide k\u00e4ivitamine.<\/li>\n<\/ol>\n<p>Enne selle konkreetse postitusega edasi liikumist soovitan siiski tutvuda sellega, mida olen seni k\u00e4sitlenud. See h\u00f5lmab j\u00e4rgmisi postitusi:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-arenduskeskkond-kasutades-paketihaldurit\/\" title=\"WordPressi arenduskeskkond (kasutades paketihaldurit)\">WordPressi arenduskeskkond (kasutades paketihaldurit)<\/a><\/strong><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/ide-wordpressi-arendamiseks-olenemata-kogemusest\/\" title=\"IDE WordPressi arendamiseks\">IDE WordPressi arendamiseks<\/a><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/visual-studio-codei-kasutajaseadetega-toeoetamine\/\" title=\"Visual Studio Code&#039;i kasutajaseadetega t\u00f6\u00f6tamine\">Visual Studio Code&#8217;i kasutajaseadetega t\u00f6\u00f6tamine<\/a><\/strong><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/kirjutamisueksuse-testid-phpunitiga-1-osa-seadistamine\/\" title=\"Kirjutamis\u00fcksuse testid PHPUnitiga, 1. osa: Seadistamine\">Kirjutamis\u00fcksuse testid PHPUnitiga, 1. osa: Seadistamine<\/a><\/li>\n<\/ol>\n<p>Kui olete seda teinud, naaske selle postituse juurde ja j\u00e4tkame arutlemist funktsiooni tearDown ja selle \u00fcle, millised \u00fchikutestid WordPressi kontekstis tegelikult v\u00e4lja n\u00e4evad.<\/p>\n<h2>\u00dchikutestid PHPUnitiga, 2. osa: Rebimine<\/h2>\n<p>Enne edasiliikumist pidage meeles, et arendajad kohtlevad funktsiooni <strong>setUp<\/strong> sageli konstruktori ja <strong>rebimise<\/strong> funktsiooni h\u00e4vitajana. aga pidage meeles, et viimast pole alati vaja.<\/p>\n<p>Siin on hea rusikareegel, mida meeles pidada:<\/p>\n<ul>\n<li>K\u00f5ik, mida testfunktsioon vajab, kutsub esile <strong>setUp-<\/strong> funktsiooni, nii et vajalikud klassid on vajalikud.<\/li>\n<li>TearDown funktsiooni pole alati vaja, kuna funktsioon <strong>setUp<\/strong> v\u00f5ib klassi uuesti <strong>initsialiseerida .<\/strong><\/li>\n<\/ul>\n<p>Mida see t\u00e4hendab funktsioonile <strong>tearDown, kui see ei l\u00e4htesta<\/strong> <strong>h\u00e4\u00e4lestusfunktsiooni<\/strong> k\u00e4igus loodud andmeid ?<\/p>\n<h3>1 Rebimise funktsioon<\/h3>\n<p>Parim n\u00f5uanne, mida saan funktsiooni <strong>tearDown<\/strong> kohta anda, on see, et seda tuleks kasutada juhul, kui m\u00f5ne testi ajal on midagi seadistatud, mis j\u00e4\u00e4b maha.<\/p>\n<p>See v\u00f5ib olla midagi, mis on kirjutatud andmebaasi, miski, mis on kirjutatud logisse, v\u00f5i \u00fcldisemalt midagi, mis on kirjutatud k\u00f5vakettale.<\/p>\n<p>Seega, kui test kirjutab kirje v\u00f5i faili, k\u00e4ivitub <strong>rebimise<\/strong> meetod p\u00e4rast testi ja peaks eemaldama k\u00f5ik draivile salvestatud testid, mis ei ole testi osa, kuid mida ei ole j\u00e4rgmise testi jaoks p\u00fcsivalt vaja. tuleks enda j\u00e4relt \u00e4ra koristada.<\/p>\n<p>Nii et m\u00f5nes m\u00f5ttes on see nagu <strong><a href=\"http:\/\/en.cppreference.com\/w\/cpp\/language\/destructor\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4vitaja<\/a><\/strong>, kuid kui te pole kunagi kasutanud keelt, millel on h\u00e4vitaja, tundub nomenklatuur kas ebaoluline v\u00f5i pole sellel m\u00f5tet.<\/p>\n<blockquote>\n<p><strong>Destruktor<\/strong> on spetsiaalne liigefunktsioon, mis kutsutakse v\u00e4lja objekti eluea l\u00f5ppedes. <strong>Destruktori<\/strong> eesm\u00e4rk \u00a0on vabastada ressursid, mida objekt v\u00f5is oma eluea jooksul omandada.<\/p>\n<\/blockquote>\n<p>Seega on v\u00f5ib-olla parem m\u00f5elda funktsioonile lihtsalt testij\u00e4rgse puhastamise viisina (ja mitte muutuja nullv\u00e4\u00e4rtuse m\u00e4\u00e4ramises, kuna funktsioon <strong>setUp<\/strong> saab seda teha).<\/p>\n<h3>2 \u00fchikutesti WordPressi projektide jaoks<\/h3>\n<p>WordPressi projektide jaoks \u00fchikutestide kirjutamisel peame veenduma, et meil on selge, millist t\u00fc\u00fcpi \u00fchikuteste me r\u00e4\u00e4gime.<\/p>\n<p>N\u00e4iteks see, mida ma nimetan klassikalisteks v\u00f5i standardseteks \u00fchikutestideks, j\u00e4rgib &quot;testip\u00f5hise arenduse&quot; metoodikat, millest r\u00e4\u00e4gin kohe. Teisest k\u00fcljest on WordPressil oma \u00fchikutestide komplekt teemade jms jaoks, millest r\u00e4\u00e4gin ka veidi hiljem selles postituses.<\/p>\n<p>Kuid selle jaotise puhul arvasin, et v\u00f5iks olla kasulik r\u00e4\u00e4kida natuke esimesest, mitte teisest, et saaksite n\u00e4ha, kuidas see v\u00f5iks toimida.<\/p>\n<p>Allolevas n\u00e4ites kirjutan teste pistikprogrammi vastu, mis vastutab kolmanda osapoole API-ga suhtlemise eest. See konkreetne pistikprogramm n\u00f5uab kasutajanime ja parooli v\u00f5i API-d <strong>ning<\/strong> me tahame veenduda, et selle postituse jaoks hangib see testi k\u00e4ivitamisel vea \u00f5igesti.<\/p>\n<p>Pange t\u00e4hele, et seda koodi lugedes n\u00e4ete, et r\u00e4\u00e4gin natuke peegeldusest. Teen varsti terve postituse PHP Reflectioni kohta, nii et see heidab sellele veidi valgust.<\/p>\n<p>Eeldage alloleva koodi puhul siiski, et see on viis, kuidas p\u00e4\u00e4seme juurde atribuutidele, mis on muidu privaatseks m\u00e4rgitud.<\/p>\n<p>Tuletame meelde selle seeria viimast postitust, meil oli esialgne test, mis n\u00e4gi <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/248c7741273e6be414c1f98c11085fe7#file-01-acme-cache-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00e4lja selline:<\/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>Pange t\u00e4hele, et selles testis pole <strong>rebimise<\/strong> funktsiooni, mis oleks m\u00f5istlik, eks? L\u00f5ppude l\u00f5puks ei kirjutata midagi andmebaasi ega faili.<\/p>\n<p>Kuid oletame, et tahame tutvustada testjuhtumit, millel on failinimi, sisu ja mis kirjutab sisu faili. Sel juhul on need staatilised andmed, kuid tehniliselt v\u00f5ib see olla k\u00f5ik, mis on kettale kirjutatud.<\/p>\n<h4>1 Testi seadistamine<\/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\">Esiteks<\/a><\/strong> tahame testi seadistada, m\u00e4\u00e4ratledes failinime, faili sisu ja valmistades ette atribuudid.<\/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>Piisavalt lihtne, eks?<\/p>\n<h4>2 Kirjutage ja lugege andmeid<\/h4>\n<p>J\u00e4rgmisena tahame andmed kirjutada, andmeid lugeda ja kinnitada, et sisu <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-01-testing-contents-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">on sama.<\/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>Kui k\u00e4ivitate testi (mida ma pole veel tehniliselt k\u00e4sitlenud, kuidas seda teha), m\u00e4rkate, et <strong>fail testFile.txt<\/strong> asub endiselt teie s\u00fcsteemis.<\/p>\n<h4>3 TearDowni kasutamine<\/h4>\n<p>L\u00f5puks peame kasutama <strong>tearDown<\/strong> meetodit, et veenduda, et fail kustutatakse p\u00e4rast \u00fchikutesti l\u00f5petamist. Kui olete oma koodi rakendanud nii, nagu \u00fclal n\u00e4ete <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-02-full-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, v\u00f5ib see v\u00e4lja n\u00e4ha j\u00e4rgmine.<\/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  public function tearDown()\n  {\n    if (file_exists($this-&gt;filename)) {\n      unlink($this-&gt;filename);\n    }\n  }\n}\n<\/code><\/pre>\n<p>Pange t\u00e4hele, et <strong>tearDown<\/strong> meetodi puhul kontrollin esmalt, kas <a href=\"https:\/\/php.net\/manual\/en\/function.file-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fail_exists<\/a>. Selle p\u00f5hjuseks on asjaolu, et kui proovite lihtsalt <a href=\"https:\/\/php.net\/manual\/en\/function.unlink.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lahti linkida<\/a> faili, mida pole, kuvatakse testide k\u00e4ivitamisel t\u00f5rketeade, sest kui <strong>tearDown<\/strong> on olemas, proovib see p\u00e4rast iga testfunktsiooni midagi kustutada. Ja kui faili pole olemas, pole sellel midagi kustutada ja see p\u00f5hjustab probleeme.<\/p>\n<p>Seega, p\u00fc\u00fcdes kirjutada koodi kaitsvalt, usun, et see vastutab faili olemasolu kontrollimise eest enne selle tegelikku kustutamist.<\/p>\n<h3>3 Toimingute j\u00e4rjekord<\/h3>\n<p>Kui r\u00e4\u00e4kida puhtast \u00fchikutestimisest, loete seda tavaliselt <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Test-driven_development\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">testip\u00f5hise arendusena<\/a><\/strong>. See on iseenesest suur teema; Siiski tasub siin mainida, kui otsustate seda edasi uurida ja isegi oma arendustegevuses rakendada.<\/p>\n<p>Selle l\u00e4henemisviisi \u00fcldist ideed nimetatakse sageli &quot;punaseks-roheliseks korduseks&quot;. Ja ma ei eita seda, selles l\u00e4henemises on midagi. Nimelt v\u00f5imaldab see teil arendajana kirjutada koodi nii, nagu te eeldate, et see t\u00f6\u00f6tab enne koodi tegelikku kirjutamist.<\/p>\n<p>Ps\u00fchholoogia selle taga on j\u00e4rgmine: kui teate, kuidas kood t\u00f6\u00f6tab, kirjutate t\u00f5en\u00e4olisemalt teste, mis l\u00e4bivad; samas kui kirjutate testid selle kohta, kuidas kood peaks toimima, peaksite kirjutama parema koodi.<\/p>\n<p>Kahjuks ei ole meile alati seda luksust lubatud. Kuid see ei t\u00e4henda, et peaksime vanas\u00f5nalise lapse veega v\u00e4lja viskama. Selle asemel olen ma seda meelt, et peaksite v\u00f5imalusel kirjutama teste ja p\u00e4rast seda koodi kirjutama; vastasel juhul kirjutage oma testid oma koodi j\u00e4rele.<\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes on testimine sellest hoolimata parem kui testide puudumine.<\/p>\n<h3>4 Testimine WordPressiga<\/h3>\n<p>Mis puutub WordPressi \u00fcksuste testimisse, siis olete t\u00f5en\u00e4oliselt m\u00f5ne asja peale komistanud. M\u00f5nikord on sisu vale nimetus v\u00f5i v\u00f5ib olla isegi eksitav WordPressi \u00fcksuse testimise osas.<\/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=\"Kirjutamisosa testid PHPUnitiga, 2. osa: Rebimine\"><\/a><\/p>\n<p>N\u00e4iteks tasub t\u00e4helepanu p\u00f6\u00f6rata kahele asjale:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Theme_Unit_Test\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Teema\u00fcksuse test<\/a><\/strong>. See konkreetne sisukomplekt on m\u00f5eldud selleks, et aidata teemaarendajatel testida oma teemade k\u00f5iki suuremaid ja v\u00e4iksemaid juhtumeid. N\u00e4iteks pole automatiseeritud t\u00f6\u00f6riistu, mida kasutaksite, nagu eespool k\u00e4sitletu.<\/li>\n<li><strong><a href=\"https:\/\/make.wordpress.org\/core\/handbook\/testing\/automated-testing\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Automatiseeritud testimine<\/a><\/strong>. WordPress tarnitakse koos oma \u00fchikutestide komplektiga, et me ei peaks kirjutama teste enamiku WordPressi funktsioonide kohta (nt kas API funktsioonid t\u00f6\u00f6tavad ootusp\u00e4raselt v\u00f5i mitte). See v\u00f5imaldab meil keskenduda oma domeeniloogika \u00fchikutestide kirjutamisele.<\/li>\n<li><strong><a href=\"https:\/\/make.wordpress.org\/cli\/handbook\/plugin-unit-tests\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Plugina \u00fchiku testid<\/a><\/strong>. Kui olete kasutanud WP-CLI-d (v\u00f5i olete sellest huvitatud), olete t\u00f5en\u00e4oliselt seda lehte lugenud v\u00f5i isegi seda t\u00f6\u00f6riista kasutanud. See on kasulik, kuid sihib ka WordPressi pistikprogrammide testimise konkreetseid aspekte.<\/li>\n<\/ol>\n<p>K\u00f5ik eelnev on kasulik teave ja ma ei \u00fctle, et seda tuleks ignoreerida. Selle asemel tuleks see \u00fchendada \u00fclej\u00e4\u00e4nud selles postituses kasutatud teabega.<\/p>\n<h2>\u00dchikutestide k\u00e4ivitamine<\/h2>\n<p>J\u00e4rgmises postituses tutvustan teile k\u00f5ike, mida peate teadma XML-faili seadistamiseks, mis annab PHPUnitile teada, kus testid asuvad ja kuidas neid k\u00e4ivitada.<\/p>\n<p>Praegu aga vaadake \u00fcle selles postituses olev kood ja valmistuge selle seeria j\u00e4rgmises postituses sellest edasi ehitama.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00d5petus, kuidas kirjutada \u00fchikuteste, mis kasutavad \u00f5igesti PHPUniti h\u00e4\u00e4lestus- ja rebimismeetodeid.<\/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":[718,842,802],"tags":[1165],"class_list":["post-229917","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-opetused","category-php-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229917","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229917"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229917\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/164140"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229917"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229917"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229917"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}