{"id":4,"date":"2016-09-16T02:02:20","date_gmt":"2016-09-16T02:02:20","guid":{"rendered":"http:\/\/52.201.184.187\/?p=4"},"modified":"2017-03-03T00:45:45","modified_gmt":"2017-03-03T00:45:45","slug":"testear-javascript-con-qunit","status":"publish","type":"post","link":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/","title":{"rendered":"Calculadora en Javascript haciendo TDD con Qunit"},"content":{"rendered":"<p><strong>\u00bfPor qu\u00e9 TDD con Qunit?<\/strong><br \/>\nA veces nos pasa que tenemos c\u00f3digo Javascript muy complejo, y nos da \u00abmiedo\u00bb tocarlo. Para salvar esta situaci\u00f3n podemos combinar 2 herramientas: modularizaci\u00f3n de c\u00f3digo y test unitario. [Inserte link a un futuro post acerca de modularizaci\u00f3n de c\u00f3digo aqu\u00ed]. Para fines did\u00e1cticos vamos a suponer que tenemos nuestro c\u00f3digo Javascript separado en 3 capas:<\/p>\n<ol>\n<li>Presentaci\u00f3n o c\u00f3digo que interact\u00faa con el html<\/li>\n<li>L\u00f3gica de negocio<\/li>\n<li>Acceso a datos (si fuera necesaria)<\/li>\n<\/ol>\n<p>Lo que nos interesa probar en este caso es la capa de la l\u00f3gica de negocio.\u00a0Para testear vamos a valernos de Qunit. \u00bfPor qu\u00e9 eleg\u00ed esta herramienta? Fue la que m\u00e1s simple de configurar me result\u00f3 y pude probar mi c\u00f3digo f\u00e1cilmente. En otras palabras, me di\u00f3 ROI inmediato. [Nuevamente, inserte link a futuro post explicando este concepto&#8230;]<\/p>\n<p><strong>Configuraci\u00f3n b\u00e1sica <\/strong><br \/>\nEl sitio oficial\u00a0<a href=\"https:\/\/qunitjs.com\/\">https:\/\/qunitjs.com\/<\/a>\u00a0muestra un ejemplo de la configuraci\u00f3n minima que necesitamos. Se basa en un archivo HTML que incluye los test y los ejecutaremos en el navegador:<\/p>\n<ol>\n<li>Archivo JS de la libreria Qunit<\/li>\n<li>Hoja de estilos de QUnit<\/li>\n<li>Archivo JS con los tests<\/li>\n<li>Archivos JS con nuestro c\u00f3digo productivo.<\/li>\n<li>Archivo HTML que incluya los archivos de los puntos anteriores.<\/li>\n<\/ol>\n<p><strong>La calculadora con TDD<\/strong><br \/>\nVamos a verlo un poco m\u00e1s en detalle, usando como ejemplo una calculadora simple. Por el momento nuestra calculadora solo sabr\u00e1 sumar:<\/p>\n<ul>\n<li>suma\n<ul>\n<li>recibe 2 n\u00fameros enteros. retorna la suma de ambos n\u00fameros.<\/li>\n<li>si alguno de los par\u00e1metros no corresponde el formato, lanza un mensaje de error.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Para empezar, creemos un HTML con el siguiente contenido:<\/p>\n<pre class=\"lang:default decode:true\" title=\"index.html\">&amp;lt;!DOCTYPE html&amp;gt;\r\n&amp;lt;html&amp;gt;\r\n    &amp;lt;head&amp;gt;\r\n        &amp;lt;title&amp;gt;Calculadora&amp;lt;\/title&amp;gt;\r\n        &amp;lt;meta charset=\"UTF-8\"&amp;gt;\r\n        &amp;lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&amp;gt;\r\n    &amp;lt;\/head&amp;gt;\r\n    &amp;lt;body&amp;gt;\r\n        &amp;lt;div&amp;gt;TODO write content&amp;lt;\/div&amp;gt;\r\n    &amp;lt;\/body&amp;gt;\r\n&amp;lt;\/html&amp;gt;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>El anterior html incluye el js y css de qunit, adem\u00e1s de unos divs en los que se mostrar\u00e1n nuestros tests.<\/p>\n<p>Creemos el archivo tests.js y pong\u00e1mosle el siguiente contenido:<\/p>\n<pre><code>\r\nQUnit.test( \"hello test\", function( assert ) {\r\n  assert.ok( 1 == \"1\", \"Passed!\" );\r\n});\r\n<\/code><\/pre>\n<p>En este archivo podemos notar que llamamos a la funci\u00f3n \u00abtest\u00bb de Qunit, que recibe un string con el caso de test y una funci\u00f3n, que es la ejecuci\u00f3n del caso de test propiamente dicho. Dentro de ese test, disponemos del objeto assert, el cual nos brinda todas las aserciones que necesitamos.<br \/>\nEjecutemos el html que creamos, y deber\u00edamos ver una hermosa pantalla de Qunit indic\u00e1ndonos que el test acaba de pasar. Felicitaciones, tenemos el primer test dummy con Qunit!<\/p>\n<p>Ahora si, vamos a escribir un test para nuestra calculadora! En tests.js pongamos:<\/p>\n<pre><code>\r\nQUnit.test(\"calculadora.sumar, con dos numeros enteros, retorna la suma de ambos\", function (assert) {\r\n\r\n    var resultado = calculadora.sumar(1, 2);\r\n    assert.equal(3, resultado);\r\n\r\n});\r\n<\/code><\/pre>\n<p>Ejecutemos los tests. Deber\u00edan fallar porque nuestra calculadora no est\u00e1 definida todav\u00eda. (nos va a dar un error del estilo ReferenceError: calculadora is not defined)<\/p>\n<p>Creemos un nuevo archivo llamado calculadora.js e import\u00e9moslo en nuestro HTML:<\/p>\n<pre class=\"lang:js decode:true \">var calculadora = (function () {\r\n    function sumar(unNumero, otroNumero) {\r\n        if (isNaN(unNumero) || (isNaN(otroNumero))) {\r\n            throw \"El metodo espera 2 numeros enteros\";\r\n        }\r\n        return unNumero + otroNumero;\r\n    }\r\n    return{\r\n        sumar: sumar\r\n    };\r\n})();<\/pre>\n<p>&nbsp;<\/p>\n<p class=\"\">Si volvemos a ejecutar los tests, nos va a dar un error asi:<code><\/code><\/p>\n<blockquote>\n<pre class=\"lang:default decode:true\">Expected:\r\nundefined\r\nResult:\r\n3<\/pre>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Obvio! porque nuestra calculadora no retorna nada!!! Hag\u00e1mosla andar:<\/p>\n<pre><code>\r\n    function sumar(unNumero, otroNumero) {\r\n        return unNumero + otroNumero;\r\n    }\r\n<\/code><\/pre>\n<p>Ejecutemos los tests nuevamente, y Eureka! vamos a tener nuestro primer test en verde.<\/p>\n<p>Ahora vamos a agregar otro caso de test. Esta vez queremos probar que si le mandamos cualquier par\u00e1metro no permitido a nuestra calculadora, esta nos va a dar un mensaje de error descriptivo. (en forma de excepci\u00f3n). \u00bfC\u00f3mo probamos que el m\u00e9todo nos di\u00f3 una excepci\u00f3n? assert tiene un m\u00e9todo throws, que nos sirve para esto. Nuestro nuevo test quedar\u00e1 as\u00ed:<\/p>\n<pre><code>\r\nQUnit.test(\"calculadora.sumar, con algun parametro mal, lanza error\", function (assert) {\r\n    var mensajeEsperado = \"El metodo espera 2 numeros enteros\";\r\n    assert.throws(function () {\r\n        calculadora.sumar(\"aa\", 2);\r\n    }, mensajeEsperado);\r\n    assert.throws(function () {\r\n        calculadora.sumar(2, \"2a\");\r\n    }, mensajeEsperado);\r\n});\r\n<\/code><\/pre>\n<p>Ojo! Prestemos atenci\u00f3n a como verificamos que calculadora.sumar arroja una excepcion: usamos la funci\u00f3n throws, que recibe una funci\u00f3n que \u00abenvuelve\u00bb la ejecuci\u00f3n de la funci\u00f3n que queremos probar.<br \/>\nEn este punto tendremos un test fallando. Solo nos resta dejarlo en verde:<\/p>\n<pre><code>\r\n    function sumar(unNumero, otroNumero) {\r\n        if (isNaN(unNumero) || (isNaN(otroNumero))) {\r\n            throw \"El metodo espera 2 numeros enteros\";\r\n        }\r\n        return unNumero + otroNumero;\r\n    }\r\n<\/code><\/pre>\n<p><strong>Palabras finales&#8230;<\/strong><br \/>\nEn este\u00a0<a href=\"https:\/\/bitbucket.org\/etebes\/ejemplo-qunit.git\">repositorio<\/a>\u00a0pueden encontrar el proyecto resuelto.<\/p>\n<p>Les recomiendo tambien un post que encontr\u00e9, que da un poco m\u00e1s de detalle y ejemplos del api:<br \/>\n<a href=\"http:\/\/www.infragistics.com\/community\/blogs\/dhananjay_kumar\/archive\/2015\/01\/15\/getting-started-with-javascript-unit-testing-using-qunit.aspx\" target=\"_blank\">http:\/\/www.infragistics.com\/community\/blogs\/dhananjay_kumar\/archive\/2015\/01\/15\/getting-started-with-javascript-unit-testing-using-qunit.aspx<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfPor qu\u00e9 TDD con Qunit? A veces nos pasa que tenemos c\u00f3digo Javascript muy complejo, y nos da \u00abmiedo\u00bb tocarlo. Para salvar esta situaci\u00f3n podemos combinar 2 herramientas: modularizaci\u00f3n de c\u00f3digo y test unitario. [Inserte link a un futuro post acerca de modularizaci\u00f3n de c\u00f3digo aqu\u00ed]. Para fines did\u00e1cticos vamos a suponer que tenemos nuestro\u2026 <span class=\"read-more\"><a href=\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/\">Leer m\u00e1s &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,4,6,3],"tags":[7,8],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Calculadora en Javascript haciendo TDD con Qunit - Desarrollo \u00c1gil<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calculadora en Javascript haciendo TDD con Qunit - Desarrollo \u00c1gil\" \/>\n<meta property=\"og:description\" content=\"\u00bfPor qu\u00e9 TDD con Qunit? A veces nos pasa que tenemos c\u00f3digo Javascript muy complejo, y nos da \u00abmiedo\u00bb tocarlo. Para salvar esta situaci\u00f3n podemos combinar 2 herramientas: modularizaci\u00f3n de c\u00f3digo y test unitario. [Inserte link a un futuro post acerca de modularizaci\u00f3n de c\u00f3digo aqu\u00ed]. Para fines did\u00e1cticos vamos a suponer que tenemos nuestro\u2026 Leer m\u00e1s &raquo;\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/\" \/>\n<meta property=\"og:site_name\" content=\"Desarrollo \u00c1gil\" \/>\n<meta property=\"article:published_time\" content=\"2016-09-16T02:02:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-03-03T00:45:45+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@emilianotebes\" \/>\n<meta name=\"twitter:site\" content=\"@emilianotebes\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emiliano\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\",\"url\":\"http:\/\/52.201.184.187\/blog\/\",\"name\":\"Desarrollo \\u00c1gil\",\"description\":\"Sofware por y para humanos\",\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/52.201.184.187\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#webpage\",\"url\":\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/\",\"name\":\"Calculadora en Javascript haciendo TDD con Qunit - Desarrollo \\u00c1gil\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\"},\"datePublished\":\"2016-09-16T02:02:20+00:00\",\"dateModified\":\"2017-03-03T00:45:45+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"http:\/\/desarrollo-agil.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculadora en Javascript haciendo TDD con Qunit\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#webpage\"},\"author\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"headline\":\"Calculadora en Javascript haciendo TDD con Qunit\",\"datePublished\":\"2016-09-16T02:02:20+00:00\",\"dateModified\":\"2017-03-03T00:45:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#webpage\"},\"wordCount\":658,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"keywords\":[\"Javascript\",\"Qunit\"],\"articleSection\":[\"HTML\",\"Javascript\",\"Qunit\",\"Test Unitario\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\",\"name\":\"Emiliano\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.201.184.187\/blog\/#personlogo\",\"inLanguage\":\"es\",\"url\":\"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g\",\"caption\":\"Emiliano\"},\"logo\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#personlogo\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/emilianotebes\/\",\"https:\/\/twitter.com\/emilianotebes\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calculadora en Javascript haciendo TDD con Qunit - Desarrollo \u00c1gil","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/","og_locale":"es_ES","og_type":"article","og_title":"Calculadora en Javascript haciendo TDD con Qunit - Desarrollo \u00c1gil","og_description":"\u00bfPor qu\u00e9 TDD con Qunit? A veces nos pasa que tenemos c\u00f3digo Javascript muy complejo, y nos da \u00abmiedo\u00bb tocarlo. Para salvar esta situaci\u00f3n podemos combinar 2 herramientas: modularizaci\u00f3n de c\u00f3digo y test unitario. [Inserte link a un futuro post acerca de modularizaci\u00f3n de c\u00f3digo aqu\u00ed]. Para fines did\u00e1cticos vamos a suponer que tenemos nuestro\u2026 Leer m\u00e1s &raquo;","og_url":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/","og_site_name":"Desarrollo \u00c1gil","article_published_time":"2016-09-16T02:02:20+00:00","article_modified_time":"2017-03-03T00:45:45+00:00","twitter_card":"summary_large_image","twitter_creator":"@emilianotebes","twitter_site":"@emilianotebes","twitter_misc":{"Escrito por":"Emiliano","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/52.201.184.187\/blog\/#website","url":"http:\/\/52.201.184.187\/blog\/","name":"Desarrollo \u00c1gil","description":"Sofware por y para humanos","publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/52.201.184.187\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"es"},{"@type":"WebPage","@id":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#webpage","url":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/","name":"Calculadora en Javascript haciendo TDD con Qunit - Desarrollo \u00c1gil","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/#website"},"datePublished":"2016-09-16T02:02:20+00:00","dateModified":"2017-03-03T00:45:45+00:00","breadcrumb":{"@id":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"http:\/\/desarrollo-agil.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Calculadora en Javascript haciendo TDD con Qunit"}]},{"@type":"Article","@id":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#article","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#webpage"},"author":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"headline":"Calculadora en Javascript haciendo TDD con Qunit","datePublished":"2016-09-16T02:02:20+00:00","dateModified":"2017-03-03T00:45:45+00:00","mainEntityOfPage":{"@id":"http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#webpage"},"wordCount":658,"commentCount":0,"publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"keywords":["Javascript","Qunit"],"articleSection":["HTML","Javascript","Qunit","Test Unitario"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/52.201.184.187\/blog\/test-unitario\/testear-javascript-con-qunit\/#respond"]}]},{"@type":["Person","Organization"],"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851","name":"Emiliano","image":{"@type":"ImageObject","@id":"http:\/\/52.201.184.187\/blog\/#personlogo","inLanguage":"es","url":"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g","contentUrl":"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g","caption":"Emiliano"},"logo":{"@id":"http:\/\/52.201.184.187\/blog\/#personlogo"},"sameAs":["https:\/\/www.linkedin.com\/in\/emilianotebes\/","https:\/\/twitter.com\/emilianotebes"]}]}},"_links":{"self":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/4"}],"collection":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/comments?post=4"}],"version-history":[{"count":31,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/4\/revisions"}],"predecessor-version":[{"id":103,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/4\/revisions\/103"}],"wp:attachment":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/media?parent=4"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/categories?post=4"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/tags?post=4"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}