{"id":229915,"date":"2022-11-27T14:40:00","date_gmt":"2022-11-27T11:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229915"},"modified":"2022-11-27T14:41:19","modified_gmt":"2022-11-27T11:41:19","slug":"att-skriva-enhetstester-med-phpunit-del-2-the-tear-down","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/att-skriva-enhetstester-med-phpunit-del-2-the-tear-down\/","title":{"rendered":"Att skriva enhetstester med PHPUnit, del 2: The Tear Down"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/skriva-enhetstester-med-phpunit-del-1-installationen\/\" title=\"I slutet av f\u00f6rra m\u00e5naden\">I slutet av f\u00f6rra m\u00e5naden<\/a><\/strong> b\u00f6rjade jag prata om att skriva enhetstester i PHPUnit f\u00f6r WordPress-baserad kod. Detta inkluderade i f\u00f6rsta hand id\u00e9n att st\u00e4lla in <strong><a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPUnit<\/a><\/strong>, <strong>setUp-<\/strong> funktionen och skriva grundl\u00e4ggande tester.<\/p>\n<p>Detta diskuterade dock inte vad jag vet om <strong>tearDown-<\/strong> funktionen som fortfarande \u00e4r en viktig egenskap f\u00f6r att skriva med tester. Dessutom finns det tv\u00e5 s\u00e4tt att \u00f6verv\u00e4ga att skriva tester f\u00f6r WordPress-projekt.<\/p>\n<p>N\u00e4mligen:<\/p>\n<ol>\n<li>skriva tester specifikt f\u00f6r plugins och applikationslagerfunktioner,<\/li>\n<li>k\u00f6ra enhetstester mot WordPress-applikationen.<\/li>\n<\/ol>\n<p>Innan jag g\u00e5r vidare med det h\u00e4r inl\u00e4gget rekommenderar jag dock att du tar reda p\u00e5 vad jag hittills har tagit upp. Detta inkluderar f\u00f6ljande inl\u00e4gg:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/en-wordpress-utvecklingsmiljoe-med-en-pakethanterare\/\" title=\"En WordPress-utvecklingsmilj\u00f6 (med en pakethanterare)\">En WordPress-utvecklingsmilj\u00f6 (med en pakethanterare)<\/a><\/strong><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/en-ide-foer-wordpress-utveckling-oavsett-erfarenhet\/\" title=\"En IDE f\u00f6r WordPress-utveckling\">En IDE f\u00f6r WordPress-utveckling<\/a><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/arbeta-med-anvaendarinstaellningar-i-visual-studio-code\/\" title=\"Arbeta med anv\u00e4ndarinst\u00e4llningar i Visual Studio Code\">Arbeta med anv\u00e4ndarinst\u00e4llningar i Visual Studio Code<\/a><\/strong><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/skriva-enhetstester-med-phpunit-del-1-installationen\/\" title=\"Skriva enhetstester med PHPUnit, del 1: Installationen\">Skriva enhetstester med PHPUnit, del 1: Installationen<\/a><\/li>\n<\/ol>\n<p>N\u00e4r du har gjort det, \u00e5terv\u00e4nd till det h\u00e4r inl\u00e4gget och l\u00e5t oss forts\u00e4tta diskutera tearDown-funktionen och hur enhetstester i WordPress-sammanhang faktiskt ser ut.<\/p>\n<h2>Enhetstest med PHPUnit, del 2: The Tear Down<\/h2>\n<p>Innan du g\u00e5r vidare, kom ih\u00e5g att utvecklare ofta behandlar <strong>setUp-<\/strong> funktionen som konstruktorn och <strong>tearDown-<\/strong> funktionen som en destruktor; kom dock ih\u00e5g att det senare inte alltid beh\u00f6vs.<\/p>\n<p>H\u00e4r \u00e4r en bra tumregel att komma ih\u00e5g:<\/p>\n<ul>\n<li>Allt som en testfunktion beh\u00f6ver anropar <strong>setUp-<\/strong> funktionen s\u00e5 att n\u00f6dv\u00e4ndiga klasser beh\u00f6vs.<\/li>\n<li>TearDown -funktionen <strong>beh\u00f6vs<\/strong> inte alltid eftersom <strong>setUp-<\/strong> funktionen kan \u00e5terinitiera en klass.<\/li>\n<\/ul>\n<p>S\u00e5 vad betyder detta f\u00f6r <strong>tearDown-<\/strong> funktionen om den inte \u00e5terst\u00e4ller data som skapats under <strong>inst\u00e4llningsfunktionen<\/strong>? <\/p>\n<h3>1 TearDown-funktionen<\/h3>\n<p>Det b\u00e4sta r\u00e5det jag kan ge kring <strong>tearDown-<\/strong> funktionen \u00e4r att den ska anv\u00e4ndas om n\u00e5got s\u00e4tts upp under n\u00e5got av testerna som \u00e4r kvar.<\/p>\n<p>Det h\u00e4r kan vara n\u00e5got som skrivs till en databas, n\u00e5got som skrivs till en logg, eller, mer allm\u00e4nt, n\u00e5got som skrivs till h\u00e5rddisken.<\/p>\n<p>S\u00e5ledes, om ett test skriver en post eller en fil, kommer <strong>tearDown-<\/strong> metoden att k\u00f6ras efter ett test och b\u00f6r ta bort det test som registrerats p\u00e5 enheten som inte \u00e4r en del av testet men som inte beh\u00f6vs permanent f\u00f6r n\u00e4sta test eller som ska st\u00e4das upp efter sig.<\/p>\n<p>S\u00e5 p\u00e5 s\u00e4tt och vis \u00e4r det som en <strong><a href=\"http:\/\/en.cppreference.com\/w\/cpp\/language\/destructor\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00f6rst\u00f6rare<\/a><\/strong>, men om du aldrig har anv\u00e4nt ett spr\u00e5k som har en destruktor verkar den nomenklaturen antingen irrelevant eller inte vettig.<\/p>\n<blockquote>\n<p>En <strong>destruktor<\/strong> \u00e4r en speciell medlemsfunktion som anropas n\u00e4r ett objekts livstid tar slut. Syftet med <strong>f\u00f6rst\u00f6raren<\/strong> \u00e4r att frig\u00f6ra de resurser som f\u00f6rem\u00e5let kan ha f\u00f6rv\u00e4rvat under sin livstid.<\/p>\n<\/blockquote>\n<p>D\u00e4rf\u00f6r kanske det \u00e4r b\u00e4ttre att helt enkelt t\u00e4nka p\u00e5 funktionen som ett s\u00e4tt att st\u00e4da upp efter ett test (och inte i betydelsen att st\u00e4lla in en variabel lika med null eftersom <strong>setUp-<\/strong> funktionen kan g\u00f6ra det).<\/p>\n<h3>2 enhetstester f\u00f6r WordPress-projekt<\/h3>\n<p>N\u00e4r vi skriver enhetstester f\u00f6r WordPress-projekt m\u00e5ste vi se till att vi \u00e4r tydliga med vilken typ av enhetstester vi pratar om.<\/p>\n<p>Till exempel, vad jag kommer att h\u00e4nvisa till som klassiska eller standard enhetstester f\u00f6ljer metoden &quot;testdriven utveckling&quot; som jag kommer att prata om om ett \u00f6gonblick. \u00c5 andra sidan har WordPress en egen upps\u00e4ttning enhetstester f\u00f6r teman och liknande som jag ocks\u00e5 kommer att prata om lite l\u00e4ngre fram i detta inl\u00e4gg.<\/p>\n<p>Men f\u00f6r det h\u00e4r avsnittet t\u00e4nkte jag att det kan vara bra att prata lite om det f\u00f6rra snarare \u00e4n det senare s\u00e5 att du kan se hur det h\u00e4r kan fungera.<\/p>\n<p>I exemplet nedan skriver jag tester mot ett plugin som \u00e4r ansvarigt f\u00f6r att kommunicera med ett tredje parts API. Denna speciella plugin kr\u00e4ver ett anv\u00e4ndarnamn och l\u00f6senord eller ett API <strong>och<\/strong> det vill vi f\u00f6rs\u00e4kra oss om att det, f\u00f6r detta inl\u00e4ggs syften, h\u00e4mtar ett fel korrekt n\u00e4r testet k\u00f6rs.<\/p>\n<p>Observera att n\u00e4r du l\u00e4ser igenom den h\u00e4r koden kommer du att se mig prata lite om reflektion. Jag ska g\u00f6ra ett helt inl\u00e4gg om PHP Reflection snart s\u00e5 det kommer att belysa detta.<\/p>\n<p>F\u00f6r koden nedan antar du dock att det \u00e4r ett s\u00e4tt som vi kan f\u00e5 tillg\u00e5ng till egenskaper som annars \u00e4r markerade som privata.<\/p>\n<p>Minns fr\u00e5n det senaste inl\u00e4gget i den h\u00e4r serien, vi hade ett f\u00f6rsta test som s\u00e5g <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/248c7741273e6be414c1f98c11085fe7#file-01-acme-cache-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r:<\/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>Observera dock att det i det h\u00e4r testet inte finns n\u00e5gon <strong>tearDown-<\/strong> funktion som \u00e4r vettig, eller hur? N\u00e4r allt kommer omkring skrivs ingenting till en databas eller till en fil.<\/p>\n<p>Men l\u00e5t oss s\u00e4ga att vi vill introducera ett testfall som kommer att ha ett filnamn, inneh\u00e5ll och som kommer att skriva inneh\u00e5llet till filen. I det h\u00e4r fallet kommer det att vara statisk data men detta kan tekniskt sett vara vad som helst som \u00e4r skrivet till disken.<\/p>\n<h4>1 St\u00e4lla in testet<\/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\">F\u00f6rst<\/a><\/strong> vill vi st\u00e4lla in testet genom att definiera filnamnet, inneh\u00e5llet i filen och f\u00f6rbereda egenskaperna.<\/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>L\u00e4tt nog, eller hur?<\/p>\n<h4>2 Skriv och l\u00e4s data<\/h4>\n<p>D\u00e4refter vill vi skriva data, l\u00e4sa data och h\u00e4vda att inneh\u00e5llet <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-01-testing-contents-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e4r detsamma.<\/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>Vid det h\u00e4r laget, om du k\u00f6r testet (som jag \u00e4nnu inte har tekniskt sett hur man g\u00f6r), kommer du att m\u00e4rka att <strong>testFile.txt<\/strong> fortfarande finns p\u00e5 ditt system.<\/p>\n<h4>3 Anv\u00e4nda tearDown<\/h4>\n<p>Slutligen m\u00e5ste vi arbeta med <strong>tearDown-<\/strong> metoden f\u00f6r att se till att filen raderas efter slutf\u00f6randet av enhetstestet. <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-02-full-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">S\u00e5 h\u00e4r kan det se ut<\/a><\/strong> om du har implementerat din kod som det du ser ovan.<\/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>L\u00e4gg m\u00e4rke till att i <strong>tearDown-<\/strong> metoden kontrollerar jag f\u00f6rst om en <a href=\"https:\/\/php.net\/manual\/en\/function.file-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">file_exists<\/a>. Detta beror p\u00e5 att om du helt enkelt f\u00f6rs\u00f6ker ta <a href=\"https:\/\/php.net\/manual\/en\/function.unlink.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bort l\u00e4nken<\/a> till en fil som inte finns, kommer du att f\u00e5 ett felmeddelande n\u00e4r du k\u00f6r dina tester, f\u00f6r om <strong>tearDown<\/strong> \u00e4r n\u00e4rvarande kommer den att f\u00f6rs\u00f6ka ta bort n\u00e5got efter varje enskild testfunktion. Och om filen inte finns finns det inget f\u00f6r den att radera, och d\u00e4rf\u00f6r kommer det att resultera i ett problem.<\/p>\n<p>S\u00e5 i ett f\u00f6rs\u00f6k att skriva kod defensivt tror jag att det \u00e4r ansvarigt f\u00f6r att kontrollera om filen finns innan du faktiskt f\u00f6rs\u00f6ker ta bort den.<\/p>\n<h3>3 Operationsordning<\/h3>\n<p>N\u00e4r det kommer till ren enhetstestning kommer du normalt att l\u00e4sa detta i termer av <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Test-driven_development\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">testdriven utveckling<\/a><\/strong>. Detta \u00e4r ett stort \u00e4mne i och f\u00f6r sig; men det \u00e4r v\u00e4rt att n\u00e4mna h\u00e4r om du v\u00e4ljer att forska vidare i det och till och med implementera det i dina utvecklingsarbeten.<\/p>\n<p>Den allm\u00e4nna id\u00e9n bakom detta tillv\u00e4gag\u00e5ngss\u00e4tt kallas ofta f\u00f6r &quot;r\u00f6d-gr\u00f6n-upprepa.&quot; Och jag f\u00f6rnekar det inte, det \u00e4r n\u00e5got med detta tillv\u00e4gag\u00e5ngss\u00e4tt. Det l\u00e5ter dig n\u00e4mligen som utvecklare skriva kod som du f\u00f6rv\u00e4ntar dig att den ska fungera innan du faktiskt skriver koden.<\/p>\n<p>Psykologin bakom det \u00e4r denna: Om du vet hur koden fungerar, \u00e4r det mer sannolikt att du skriver tester som klarar; Om du skriver tester f\u00f6r hur koden ska fungera b\u00f6r du skriva b\u00e4ttre kod.<\/p>\n<p>Tyv\u00e4rr har vi inte alltid den lyxen. Men det betyder inte att vi ska kasta ut det \u00f6k\u00e4nda barnet med vattnet. Ist\u00e4llet \u00e4r jag av den tankeg\u00e5ngen att man ska skriva prov n\u00e4r man kan och skriva koden efter\u00e5t; annars skriv dina tester efter din kod.<\/p>\n<p>I slut\u00e4ndan kommer det att vara b\u00e4ttre att ha tester p\u00e5 plats oavsett \u00e4n inga tester alls.<\/p>\n<h3>4 Testa med WordPress<\/h3>\n<p>N\u00e4r det kommer till enhetstestning i WordPress finns det n\u00e5gra saker som du f\u00f6rmodligen har snubblat \u00f6ver. Ibland \u00e4r inneh\u00e5llet en felaktig ben\u00e4mning eller kan till och med vara missvisande n\u00e4r det g\u00e4ller &quot;enhetstestning i 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=\"Att skriva enhetstester med PHPUnit, del 2: The Tear Down\"><\/a><\/p>\n<p>Som exempel, det finns tv\u00e5 saker v\u00e4rda att notera:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Theme_Unit_Test\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Temaenhetstestet<\/a><\/strong>. Denna speciella upps\u00e4ttning inneh\u00e5ll \u00e4r t\u00e4nkt att hj\u00e4lpa temautvecklare att testa alla st\u00f6rre och mindre fall f\u00f6r sina teman. Det finns inte automatiserade verktyg, till exempel, som du skulle anv\u00e4nda som i det vi har diskuterat ovan.<\/li>\n<li><strong><a href=\"https:\/\/make.wordpress.org\/core\/handbook\/testing\/automated-testing\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Automatiserad testning<\/a><\/strong>. WordPress levereras med en egen upps\u00e4ttning enhetstester s\u00e5 att vi inte beh\u00f6ver skriva tester mot det mesta av funktionaliteten i WordPress (som huruvida API-funktioner fungerar som f\u00f6rv\u00e4ntat eller inte). Detta g\u00f6r att vi kan fokusera p\u00e5 att skriva enhetstester f\u00f6r v\u00e5r egen dom\u00e4nlogik.<\/li>\n<li><strong><a href=\"https:\/\/make.wordpress.org\/cli\/handbook\/plugin-unit-tests\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Plugin-enhetstester<\/a><\/strong>. Om du har anv\u00e4nt WP-CLI (eller \u00e4r intresserad av det), s\u00e5 har du f\u00f6rmodligen l\u00e4st den h\u00e4r sidan eller till och med anv\u00e4nt det h\u00e4r verktyget. Det \u00e4r anv\u00e4ndbart, men det \u00e4r ocks\u00e5 inriktat p\u00e5 specifika aspekter av att testa WordPress-plugins.<\/li>\n<\/ol>\n<p>Allt ovanst\u00e5ende \u00e4r anv\u00e4ndbar information, och jag s\u00e4ger inte att den ska ignoreras. Ist\u00e4llet b\u00f6r den kombineras med resten av informationen som anv\u00e4nds i det h\u00e4r inl\u00e4gget.<\/p>\n<h2>K\u00f6ra enhetstester<\/h2>\n<p>I n\u00e4sta inl\u00e4gg kommer jag att g\u00e5 igenom allt du beh\u00f6ver veta f\u00f6r att st\u00e4lla in en XML-fil som kommer att informera PHPUnit om var testerna finns och hur man k\u00f6r dem.<\/p>\n<p>Men f\u00f6r nu, granska koden som finns i det h\u00e4r inl\u00e4gget och f\u00f6rbered dig p\u00e5 att bygga vidare p\u00e5 den i n\u00e4sta inl\u00e4gg i den h\u00e4r serien.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En handledning f\u00f6r hur man skriver enhetstester som korrekt utnyttjar installations- och tearDown-metoderna f\u00f6r 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":[848,807,724],"tags":[1173],"class_list":["post-229915","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=229915"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229915\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/164140"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}