{"id":70134,"date":"2023-09-13T11:39:30","date_gmt":"2023-09-13T09:39:30","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=70134&#038;preview=true&#038;preview_id=70134"},"modified":"2023-09-19T12:11:29","modified_gmt":"2023-09-19T10:11:29","slug":"jest","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/jest\/","title":{"rendered":"C\u00f3mo Probar Tus Aplicaciones con Jest"},"content":{"rendered":"<p><a href=\"https:\/\/kinsta.com\/es\/blog\/herramientas-pruebas-rendimiento\/\">Las pruebas<\/a> de software son vitales para garantizar que tus aplicaciones funcionan seg\u00fan lo esperado, especialmente cuando introduces cambios. Detectar y corregir errores en una fase temprana del desarrollo es crucial para mantener un c\u00f3digo resistente y de alta calidad.<\/p>\n<p>De las muchas herramientas y frameworks disponibles para las pruebas de JavaScript, Jest es una de las m\u00e1s populares. Jest, un producto de Meta, cuenta con amplias capacidades de comprobaci\u00f3n para aplicaciones JavaScript y las construidas con marcos JavaScript.<\/p>\n<p>Exploremos el framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>\u00bfQu\u00e9 es Jest?<\/h2>\n<p><a href=\"https:\/\/jestjs.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jest<\/a> es un framework flexible y sencillo de utilizar. Adem\u00e1s de sus funciones b\u00e1sicas de comprobaci\u00f3n de JavaScript, ofrece configuraciones y complementos para admitir la comprobaci\u00f3n de aplicaciones basadas en Babel, webpack, Vite, Parcel o <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/\">TypeScript<\/a>.<\/p>\n<p>Jest ha sido ampliamente adoptado por los desarrolladores y cuenta con una serie de complementos creados y mantenidos por la comunidad. Destaca por su facilidad de uso: Las pruebas de JavaScript no requieren configuraciones ni plugins adicionales. Pero tambi\u00e9n puedes realizar pruebas m\u00e1s avanzadas &#8211; como probar <a href=\"https:\/\/kinsta.com\/es\/secciones\/frameworks-javascript\/\">frameworks JavaScript<\/a> &#8211; utilizando algunas opciones de configuraci\u00f3n adicionales.<\/p>\n<h2>C\u00f3mo Configurar Jest para Tu Proyecto JavaScript<\/h2>\n<p>Repasemos como configurar Jest en un proyecto JavaScript existente.<\/p>\n<h3>Requisitos previos<\/h3>\n<p>Para seguir este tutorial, aseg\u00farate de que tienes lo siguiente:<\/p>\n<ul>\n<li><a href=\"https:\/\/nodejs.org\/en\/download\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a> instalado.<\/li>\n<li>npm (que ya forma parte de Node.js) o <a href=\"https:\/\/classic.yarnpkg.com\/lang\/en\/docs\/install\/#windows-stable\" target=\"_blank\" rel=\"noopener noreferrer\">Yarn<\/a> instalados.<\/li>\n<li>El <a href=\"https:\/\/www.npmjs.com\/package\/jest\" target=\"_blank\" rel=\"noopener noreferrer\">paquete npm<\/a> Jest instalado.<\/li>\n<\/ul>\n<h3>Instala el paquete Jest<\/h3>\n<ol start=\"1\">\n<li>Si a\u00fan no tienes un proyecto para seguir este tutorial, utiliza <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-jest-javascript\" target=\"_blank\" rel=\"noopener noreferrer\">este repositorio<\/a> como punto de partida.<\/li>\n<\/ol>\n<p>La rama <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-jest-javascript\/tree\/starter-files\" target=\"_blank\" rel=\"noopener noreferrer\"><code>starter-files<\/code><\/a> te proporciona una base para construir la aplicaci\u00f3n mientras sigues el tutorial. Consulta la rama <code><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-jest-javascript\/tree\/main\" target=\"_blank\" rel=\"noopener noreferrer\">main<\/a><\/code> para ver el c\u00f3digo de este tutorial y cotejar tu c\u00f3digo.<\/p>\n<ol start=\"2\">\n<li>Para instalar Jest con <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-npm\/\">npm<\/a>, ve al directorio del proyecto en tu terminal y ejecuta el siguiente comando:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">npm install --save-dev jest<\/code><\/pre>\n<p>La opci\u00f3n <code>--save-dev<\/code> indica a npm que instale el paquete en <code>devDependencies<\/code>, que contiene las dependencias que necesitas para el desarrollo.<\/p>\n<h3>Configura Jest<\/h3>\n<p>Aunque Jest suele funcionar sin configuraci\u00f3n adicional, hay dos formas de ampliar su potencia: en el archivo <strong>package.json<\/strong> y mediante un archivo de configuraci\u00f3n de Jest.<\/p>\n<h4>Configurar Jest en package. <strong>json<\/strong><\/h4>\n<p>En tu archivo <strong>package.<\/strong><strong>json<\/strong>, a\u00f1ade un objeto llamado <code>jest<\/code> con las propiedades que se muestran a continuaci\u00f3n:<\/p>\n<pre><code class=\"language-json\">{\n  \u2026\n  \"jest\": {\n    \"displayName\": \"Ecommerce\",\n    \"globals\": {\n      \"PROJECT_NAME\": \"Ecommerce TD\"\n    },\n    \"bail\": 20,\n    \"verbose\": true\n  },\n}<\/code><\/pre>\n<p>Durante la prueba, Jest busca en este objeto y aplica estas configuraciones. Puedes ver opciones adicionales en <a href=\"https:\/\/jestjs.io\/docs\/26.x\/configuration\" target=\"_blank\" rel=\"noopener noreferrer\">la p\u00e1gina de configuraciones<\/a> de Jest, pero las propiedades de este objeto incluyen:<\/p>\n<ul>\n<li><code>displayName<\/code> &#8211; Jest a\u00f1ade el valor de esta propiedad como etiqueta a los resultados de tus pruebas.<\/li>\n<li><code>globals<\/code> &#8211; Contiene un valor de objeto para definir las variables globales disponibles en tus entornos de prueba.<\/li>\n<li><code>bail<\/code> &#8211; Por defecto, Jest ejecuta todas las pruebas y muestra los errores en los resultados. <code>bail<\/code> indica a Jest que detenga la ejecuci\u00f3n tras un n\u00famero determinado de fallos.<\/li>\n<li><code>verbose<\/code> &#8211; Cuando se establece en <code>true<\/code>, muestra informes de pruebas individuales durante la ejecuci\u00f3n de la prueba.<\/li>\n<\/ul>\n<h4>Configurar Jest en un archivo de configuraci\u00f3n<\/h4>\n<p>Tambi\u00e9n puedes configurar Jest en un archivo <strong>jest.config.js<\/strong>. Jest tambi\u00e9n admite las extensiones <strong>.ts<\/strong>, <strong>.mjs<\/strong>, <strong>.cjs<\/strong> y <strong>.json<\/strong>. Al ejecutar las pruebas, Jest busca estos archivos y aplica la configuraci\u00f3n del archivo que encuentra.<\/p>\n<p>Por ejemplo, considera este archivo <strong>jest.config.js<\/strong>:<\/p>\n<pre><code class=\"language-js\">const config = {\n  displayName: \"Ecommerce\",\n  globals: {\n    \"PROJECT_NAME\": \"Ecommerce TD\"\n  },\n  bail: 20,\n  verbose: true\n}\n\nmodule.exports = config;<\/code><\/pre>\n<p>El c\u00f3digo exporta un objeto de configuraci\u00f3n Jest con las mismas propiedades que el ejemplo anterior.<\/p>\n<p>Tambi\u00e9n puedes utilizar un archivo personalizado que contenga un objeto de configuraci\u00f3n serializable en JSON y pasar la ruta del archivo a la opci\u00f3n <code>--config<\/code> al ejecutar tus pruebas.<\/p>\n<h3>Crea un archivo de prueba b\u00e1sico<\/h3>\n<p>Con Jest configurado, crea tus archivos de prueba. Jest revisa los archivos de prueba de tu proyecto, los ejecuta y proporciona los resultados. Los archivos de prueba suelen seguir un formato como <strong>[name].test.js<\/strong> o <strong>[name]-test.js<\/strong>. Este patr\u00f3n facilita tanto a Jest como a tu equipo la identificaci\u00f3n de tus archivos de prueba.<\/p>\n<p>Considera un archivo <strong>string-format.js<\/strong> que tenga el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-js\">function truncate(\n  str,\n  count,\n  withEllipsis = true\n) {\n  if (str.length &lt; = count)\n    return str\n\n  const substring = str.substr(0, count)\n\n  if (!withEllipsis)\n    return substring\n\n  return substring + '...'\n}\n\nmodule.exports = { truncate }<\/code><\/pre>\n<p>La funci\u00f3n <code>truncate()<\/code> trunca las cadenas hasta una longitud determinada con la opci\u00f3n de a\u00f1adir una elipsis.<\/p>\n<h4>Escribe la prueba<\/h4>\n<ol start=\"1\">\n<li>Crea un archivo de prueba llamado <strong>string-format.test.js<\/strong>.<\/li>\n<\/ol>\n<ol start=\"1\">\n<li>Para mantener tus archivos organizados, coloca <strong>string-format.test.js<\/strong> en el mismo directorio en el que tienes el archivo <strong>string-format.js<\/strong> o en un directorio de prueba espec\u00edfico. Independientemente de d\u00f3nde est\u00e9 tu archivo de prueba dentro del proyecto, Jest lo encuentra y lo ejecuta. Con Jest, puedes probar tus aplicaciones en varios escenarios.<\/li>\n<li>Escribe una prueba b\u00e1sica en <strong>string-format.test.js<\/strong> de la siguiente manera::<\/li>\n<\/ol>\n<pre><code class=\"language-js\">const { truncate } = require('.\/string-format')\n\ntest('truncates a string correctly', () = &gt; {\n  expect(truncate(\"I am going home\", 6)).toBe('I am g...')\n})<\/code><\/pre>\n<p>El caso de prueba tiene la descripci\u00f3n <code>truncates a string correctly<\/code>. Este c\u00f3digo utiliza la funci\u00f3n <code>expect<\/code> proporcionada por Jest, que comprueba si un valor coincide con el resultado esperado.<\/p>\n<p>El c\u00f3digo pasa <code>truncate(\"I am going home\", 6)<\/code> como argumento a <code>expect<\/code>. Este c\u00f3digo prueba el valor devuelto al llamar a <code>truncate<\/code> con los argumentos <code>\"I am going home\"<\/code> y <code>6<\/code>. La llamada a <code>expect<\/code> devuelve un objeto expectativa, que ofrece acceso a las coincidencias de Jest.<\/p>\n<p>Tambi\u00e9n contiene el comparador <code>toBe<\/code>, que tiene <code>\"I am g\u2026\"<\/code> como argumento. El emparejador <code>toBe<\/code> comprueba la igualdad entre los valores esperados y los reales.<\/p>\n<h4>Ejecutar la prueba<\/h4>\n<p>Para ejecutar tus pruebas, define el comando <code>jest<\/code>.<\/p>\n<ol start=\"1\">\n<li>En el archivo <strong>package.json<\/strong> de tu proyecto, a\u00f1ade este script <code>test<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-json\">\"scripts\": {\n  \"test\": \"jest\"\n}<\/code><\/pre>\n<ol start=\"2\">\n<li>Ahora ejecuta <code>npm run test<\/code>, <code>npm test<\/code>, o <code>npm t<\/code> en tu terminal. Ejecuta Jest para el proyecto.<\/li>\n<\/ol>\n<p>Cuando ejecutes las pruebas, \u00e9ste ser\u00e1 el resultado:<\/p>\n<figure>\n<figure style=\"width: 927px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-string-format-test.png\" alt=\"Resultado satisfactorio de la prueba Jest para string-format.test.js.\" width=\"927\" height=\"275\"><figcaption class=\"wp-caption-text\">Resultado satisfactorio de la prueba Jest para string-format.test.js.<\/figcaption><\/figure>\n<p>Los resultados muestran un conjunto de pruebas (el archivo <strong>string-format<\/strong><strong style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">.test.j<\/strong><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"><strong>s<\/strong>), una prueba ejecutada con \u00e9xito (<\/span><code>\"truncates a string correctly\"<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">), y el <\/span><code>displayName<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"> (<\/span><code>Ecommerce<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">) que definiste en la configuraci\u00f3n.<\/span><\/figure>\n<ol start=\"3\">\n<li>En <strong>string-format<\/strong>.<strong>js<\/strong>, si a\u00f1ades un punto de m\u00e1s para romper el c\u00f3digo y ejecutar la prueba, \u00e9sta falla:<\/li>\n<\/ol>\n<figure>\n<figure style=\"width: 1100px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-test-truncate-failed.png\" alt=\"Resultado de la prueba Jest fallido por una funci\u00f3n truncar rota.\" width=\"1100\" height=\"612\"><figcaption class=\"wp-caption-text\">Resultado de la prueba Jest fallido por una funci\u00f3n truncar rota.<\/figcaption><\/figure>\n<p>Este resultado sugiere que has roto la funci\u00f3n <code>truncate<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"> o has hecho actualizaciones que requieren actualizar las pruebas.<\/span><\/figure>\n<h2>C\u00f3mo Escribir Pruebas con Jest<\/h2>\n<h3>Sintaxis de las pruebas Jest<\/h3>\n<p>La sintaxis propia de Jest es sencilla de utilizar. Jest expone m\u00e9todos y objetos globales a tu proyecto para escribir pruebas. Algunos de sus t\u00e9rminos fundamentales son <code>describe<\/code>, <code>test<\/code>, <code>expect<\/code>, y matchers.<\/p>\n<ul>\n<li><code>describe<\/code>: Esta funci\u00f3n agrupa pruebas relacionadas en un archivo.<\/li>\n<li><code>test<\/code>: Esta funci\u00f3n ejecuta la prueba. Es un alias de <code>it<\/code>. Contiene aserciones para los valores que quieres probar.<\/li>\n<li><code>expect<\/code>: Esta funci\u00f3n declara las aserciones para varios valores. Proporciona acceso a emparejadores para varias formas de aserciones.<\/li>\n<li>Matchers: Te permiten afirmar un valor de varias formas. Puedes afirmar la igualdad de valores, la igualdad booleana y la igualdad contextual (como si una matriz contiene el valor).<\/li>\n<\/ul>\n<p>Para utilizarlos, considera el siguiente ejemplo:<\/p>\n<ol start=\"1\">\n<li>Sustituye la prueba del archivo <strong>string-format.test.js<\/strong> por el siguiente c\u00f3digo:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">describe(\"all string formats work as expected\", () = &gt; {\n  test(\"truncates a string correctly\", () = &gt; {\n    expect(\n      truncate(\"I am going home\", 6)\n    ).toBe(\"I am g...\")\n  })\n})<\/code><\/pre>\n<ol start=\"2\">\n<li>Ejecuta el c\u00f3digo.<\/li>\n<\/ol>\n<p>El resultado debe ser el siguiente:<\/p>\n<figure>\n<figure style=\"width: 993px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-test-truncate-string.png\" alt=\"Resultado satisfactorio de la prueba Jest que muestra la etiqueta describir.\" width=\"993\" height=\"292\"><figcaption class=\"wp-caption-text\">Resultado satisfactorio de la prueba Jest que muestra la etiqueta describir.<\/figcaption><\/figure>\n<p>La captura de pantalla muestra que la etiqueta de la funci\u00f3n <code>describe<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"> crea un bloque. Aunque <\/span><code>describe<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"> es opcional, agrupar las pruebas en un archivo con m\u00e1s contexto resulta \u00fatil.<\/span><\/figure>\n<h3>Organizar las pruebas en conjuntos de pruebas<\/h3>\n<p>En Jest, un caso de prueba consta de la funci\u00f3n <code>test<\/code>, la funci\u00f3n <code>expect<\/code> y un emparejador. Una colecci\u00f3n de casos de prueba relacionados es un conjunto de pruebas. En el ejemplo anterior, <strong>string-format<\/strong> <strong>.test.js<\/strong> es un conjunto de pruebas que incluye un caso de prueba para comprobar el archivo <strong>string-format.js<\/strong>.<\/p>\n<p>Supongamos que tienes m\u00e1s archivos en tu proyecto, como <strong>file-operations.js<\/strong>, <strong>api-logger.js<\/strong> y <strong>number-format.js<\/strong>. Puedes crear conjuntos de pruebas para estos archivos, como <strong>file-operations.test.js<\/strong>, <strong>api-logger.test.js<\/strong> y <strong>number-format.test.js<\/strong>.<\/p>\n<h3>Escribir aserciones sencillas con comparadores Jest<\/h3>\n<p>Hemos explorado un ejemplo de uso del comparador <code>toBe<\/code>. Las aserciones con <a href=\"https:\/\/jestjs.io\/docs\/expect#matchers\">otros comparadores Jest<\/a> incluyen:<\/p>\n<ul>\n<li><code>toEqual<\/code> &#8211; Para comprobar la igualdad \u00abprofunda\u00bb en instancias de objetos.<\/li>\n<li><code>toBeTruthy<\/code> &#8211; Para comprobar si un valor es verdadero en un contexto booleano.<\/li>\n<li><code>toBeFalsy<\/code> &#8211; Para comprobar si un valor es falso en un contexto booleano.<\/li>\n<li><code>toContain<\/code> &#8211; Para comprobar que una matriz contiene un valor.<\/li>\n<li><code>toThrow<\/code> &#8211; Para comprobar si una funci\u00f3n invocada produce un error.<\/li>\n<li><code>stringContaining<\/code> &#8211; Para comprobar que una cadena contiene una subcadena.<\/li>\n<\/ul>\n<p>Veamos algunos ejemplos en los que se utilizan algunos de estos emparejadores.<\/p>\n<p>Por ejemplo, puedes esperar que una funci\u00f3n o c\u00f3digo devuelva un objeto con propiedades y valores espec\u00edficos.<\/p>\n<ol start=\"1\">\n<li>Utiliza el fragmento de c\u00f3digo siguiente para probar esta funcionalidad. En este caso, quieres afirmar que el objeto devuelto es igual al objeto esperado.<\/li>\n<\/ol>\n<pre><code class=\"language-js\">expect({\n  name: \"Joe\",\n  age: 40\n}).toBe({\n  name: \"Joe\",\n  age: 40\n})<\/code><\/pre>\n<p>Este ejemplo utiliza <code>toBe<\/code>. La prueba falla porque este comparador no comprueba la igualdad en profundidad: comprueba el valor, no todas las propiedades.<\/p>\n<ol start=\"2\">\n<li>Utiliza el comparador <code>toEqual<\/code> para comprobar la igualdad profunda:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">expect({\n  name: \"Joe\",\n  age: 40\n}).toEqual({\n  name: \"Joe\",\n  age: 40\n})<\/code><\/pre>\n<p>Esta prueba se supera porque ambos objetos son \u00abprofundamente iguales\u00bb, es decir, todas sus propiedades son iguales.<\/p>\n<ol start=\"3\">\n<li>Prueba otro ejemplo de comparador que comprueba si la matriz definida contiene un elemento concreto.<\/li>\n<\/ol>\n<pre><code class=\"language-js\">expect([\"orange\", \"pear\", \"apple\"]).toContain(\"mango\")<\/code><\/pre>\n<p>Esta prueba falla porque <code>toContain<\/code> afirma que la matriz <code>[\"orange\", \"pear\", \"apple\"]<\/code> contiene un valor esperado <code>\"mango\"<\/code>, pero la matriz no lo contiene.<\/p>\n<ol start=\"4\">\n<li>Utiliza variables para realizar la misma prueba que con el c\u00f3digo siguiente:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">const fruits = [\"orange\", \"pear\", \"apple\"];\nconst expectedFruit = \"mango\";\n\nexpect(fruits).toContain(expectedFruit)<\/code><\/pre>\n<h3>Prueba c\u00f3digo as\u00edncrono<\/h3>\n<p>Hasta ahora, hemos probado c\u00f3digo s\u00edncrono: expresiones que devuelven un valor antes de que el c\u00f3digo ejecute la l\u00ednea siguiente. Tambi\u00e9n puedes utilizar Jest para c\u00f3digo as\u00edncrono con <code>async<\/code>, <code>await<\/code>, o Promesas.<\/p>\n<p>Por ejemplo, el archivo<strong> apis.js<\/strong> tiene una funci\u00f3n para realizar una <a href=\"https:\/\/kinsta.com\/es\/blog\/javascript-peticion-http\/\" target=\"_blank\" rel=\"noopener noreferrer\">solicitud de API<\/a>:<\/p>\n<pre><code class=\"language-js\">function getTodos() {\n  return fetch('https:\/\/jsonplaceholder.typicode.com\/todos\/1')\n}\n<\/code><\/pre>\n<p>La funci\u00f3n <code>getTodos<\/code> env\u00eda una solicitud <code>GET<\/code> a <code>https:\/\/jsonplaceholder.typicode.com\/todos\/1<\/code>.<\/p>\n<ol start=\"1\">\n<li>Crea un archivo llamado <strong>apis<\/strong><strong>.test.js<\/strong> con el siguiente c\u00f3digo para probar la <a href=\"https:\/\/jsonplaceholder.typicode.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">API falsa<\/a>:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">const { getTodos } = require('.\/apis')\n\ntest(\"gets a todo object with the right properties\", () = &gt; {\n  return getTodos()\n    .then((response) = &gt; {\n      return response.json()\n    })\n    .then((data) = &gt; {\n      expect(data).toHaveProperty('userId')\n      expect(data).toHaveProperty('id')\n      expect(data).toHaveProperty('title')\n      expect(data).toHaveProperty('completed')\n      expect(data).toHaveProperty('description')\n    })\n})<\/code><\/pre>\n<p>Este caso de prueba invoca la funci\u00f3n <code>getTodos<\/code> que obtiene un objeto <code>todo<\/code>. Cuando resuelve la Promise, utiliza el m\u00e9todo <code>.then<\/code> para obtener el valor resuelto.<\/p>\n<p>En ese valor, el c\u00f3digo devuelve <code>response.json()<\/code>, que es otra Promise que convierte la respuesta al formato JSON. Otro m\u00e9todo <code>.then<\/code> obtiene el objeto JSON que contiene los <code>expect<\/code> y los emparejadores. El c\u00f3digo afirma que el objeto JSON incluye cinco propiedades: <code>userId<\/code>, <code>id<\/code>, <code>title<\/code>, <code>completed<\/code>, y <code>description<\/code>.<\/p>\n<ol start=\"2\">\n<li>Ejecuta las pruebas:<\/li>\n<\/ol>\n<figure>\n<figure style=\"width: 1197px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-test-apis-failed.png\" alt=\"Resultado de la prueba Jest que muestra una prueba fallida para el c\u00f3digo as\u00edncrono.\" width=\"1197\" height=\"794\"><figcaption class=\"wp-caption-text\">Resultado de la prueba Jest que muestra una prueba fallida para el c\u00f3digo as\u00edncrono.<\/figcaption><\/figure>\n<p>\u00a0<\/p>\n<p>Como muestra la captura de pantalla, la prueba para <code>getTodos()<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"> falla. Espera la propiedad <\/span><code>description<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">, pero la API no la devuelve. Con esta informaci\u00f3n, ahora puedes pedir al equipo de gesti\u00f3n de la API de tu empresa que incluya esa propiedad si la aplicaci\u00f3n la necesita o actualizar las pruebas para que se ajusten a la respuesta de la API.<\/span><\/figure>\n<ol start=\"3\">\n<li>Elimina la aserci\u00f3n para la propiedad <code>description<\/code> y vuelve a ejecutar las pruebas:<\/li>\n<\/ol>\n<figure>\n<figure style=\"width: 1198px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-test-async.png\" alt=\"Resultado de la prueba Jest que muestra una prueba superada para el c\u00f3digo as\u00edncrono.\" width=\"1198\" height=\"397\"><figcaption class=\"wp-caption-text\">Resultado de la prueba Jest que muestra una prueba superada para el c\u00f3digo as\u00edncrono.<\/figcaption><\/figure>\n<p>La captura de pantalla muestra que todo ha superado la prueba.<\/figure>\n<ol start=\"4\">\n<li>Ahora prueba a utilizar <code>async\/await<\/code> en lugar del manejo tradicional de Promise:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">test(\"gets a todo object with the right properties\", async () = &gt; {\n  const response = await getTodos()\n  const data = await response.json()\n\n  expect(data).toHaveProperty(\"userId\")\n  expect(data).toHaveProperty(\"id\")\n  expect(data).toHaveProperty(\"title\")\n  expect(data).toHaveProperty(\"completed\")\n})<\/code><\/pre>\n<p>La palabra clave <code>async<\/code> est\u00e1 ahora antes de la funci\u00f3n. El c\u00f3digo utiliza <code>await<\/code> antes de <code>getTodos()<\/code> y <code>await<\/code> antes de <code>response.json()<\/code>.<\/p>\n<h2>Funciones Avanzadas de Jest<\/h2>\n<h3>Funciones y m\u00f3dulos simulados<\/h3>\n<p>Puede que quieras probar una expresi\u00f3n con dependencias externas al escribir pruebas. En algunos casos, especialmente en las pruebas unitarias, tus pruebas unitarias deben estar aisladas de los efectos externos. En ese caso, puedes simular tus funciones o m\u00f3dulos con Jest para controlar mejor tus pruebas.<\/p>\n<ol start=\"1\">\n<li>Por ejemplo, considera un archivo <strong>functions.js<\/strong> que contiene el siguiente c\u00f3digo:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">function multipleCalls(count, callback) {\n  if (count &lt; 0) return;\n\n  for (let counter = 1; counter &lt;= count; counter++) {\n    callback()\n  }\n}<\/code><\/pre>\n<p>La funci\u00f3n <code>multipleCalls<\/code> se ejecuta en funci\u00f3n del valor de <code>count<\/code>. Depende de la funci\u00f3n de devoluci\u00f3n de llamada: la dependencia externa. Su finalidad es saber si <code>multipleCalls<\/code> ejecuta correctamente la dependencia externa.<\/p>\n<ol start=\"2\">\n<li>Para simular la dependencia externa y seguir el estado de la dependencia en tu archivo de prueba, <strong>functions.test.js<\/strong>, utiliza este c\u00f3digo:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">const { multipleCalls } = require('.\/functions')\n\ntest(\"functions are called multiple times correctly\", () =&gt; {\n  const mockFunction = jest.fn()\n\n  multipleCalls(5, mockFunction)\n\n  expect(\n    mockFunction.mock.calls.length\n  ).toBe(5)\n})<\/code><\/pre>\n<p>Aqu\u00ed, el m\u00e9todo <code>fn<\/code> del objeto <code>jest<\/code> crea una funci\u00f3n simulada. A continuaci\u00f3n, el c\u00f3digo ejecuta <code>multipleCalls<\/code> pasando <code>5<\/code> y la funci\u00f3n simulada como argumentos. A continuaci\u00f3n, afirma que el <code>mockFunction<\/code> es llamado cinco veces. La propiedad <code>mock<\/code> contiene informaci\u00f3n sobre c\u00f3mo el c\u00f3digo llama a la funci\u00f3n y los valores devueltos.<\/p>\n<ol start=\"3\">\n<li>Cuando ejecutes la prueba, \u00e9ste ser\u00e1 el resultado esperado:<\/li>\n<\/ol>\n<figure>\n<figure style=\"width: 1191px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-test-multiplecalls.png\" alt=\"Resultado satisfactorio de la prueba Jest con una funci\u00f3n simulada.\" width=\"1191\" height=\"465\"><figcaption class=\"wp-caption-text\">Resultado satisfactorio de la prueba Jest con una funci\u00f3n simulada.<\/figcaption><\/figure>\n<p>Como se ha demostrado, el c\u00f3digo llama al <code>mockFunction<\/code><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"> cinco veces.<\/span><\/figure>\n<p>En el c\u00f3digo, la funci\u00f3n simulada imita una dependencia externa. No importa cu\u00e1l sea la dependencia externa cuando la aplicaci\u00f3n utilice <code>multipleCalls<\/code> en producci\u00f3n. A tu prueba unitaria no le importa c\u00f3mo funciona la dependencia externa. S\u00f3lo verifica que <code>multipleCalls<\/code> funciona como se espera.<\/p>\n<ol start=\"4\">\n<li>Para simular m\u00f3dulos, utiliza el m\u00e9todo <code>mock<\/code> y pasa una ruta de archivo, que es el m\u00f3dulo:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">const {\n  truncate,\n} = require(\".\/string-format\")\n\njest.mock(\".\/string-format.js\")<\/code><\/pre>\n<p>Este c\u00f3digo imita todas las funciones que exporta <strong>string-format.js<\/strong> y realiza un seguimiento de la frecuencia con que las llama. El <code>truncate<\/code> del m\u00f3dulo se convierte en una funci\u00f3n imitada, lo que hace que la funci\u00f3n pierda su l\u00f3gica original. Puedes averiguar cu\u00e1ntas veces se ejecuta <code>truncate<\/code> en tus pruebas en la propiedad <code>truncate.mock.calls.length<\/code>.<\/p>\n<p>Si tienes un error o tu c\u00f3digo no funciona, compara tu c\u00f3digo con la <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-jest-javascript\/tree\/main\" target=\"_blank\" rel=\"noopener noreferrer\">implementaci\u00f3n completa<\/a>.<\/p>\n<h2>Prueba Componentes React con Jest y la Biblioteca de Pruebas React<\/h2>\n<p>Si a\u00fan no tienes un proyecto para seguir este tutorial, puedes utilizar <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-jest-react\" target=\"_blank\" rel=\"noopener noreferrer\">este proyecto React de ejemplo<\/a> como punto de partida. La rama <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-jest-react\/tree\/starter-files\" target=\"_blank\" rel=\"noopener noreferrer\"><code>starter-files<\/code><\/a> te ayudar\u00e1 a empezar a componer el c\u00f3digo mientras sigues el tutorial. Utiliza la <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-jest-react\/tree\/main\/\" target=\"_blank\" rel=\"noopener noreferrer\"><code>main<\/code><\/a> como referencia para cotejar tu c\u00f3digo con el c\u00f3digo completo de este tutorial.<\/p>\n<p>Puedes utilizar Jest para probar frameworks de JavaScript como <a href=\"https:\/\/kinsta.com\/es\/secciones\/react\/\">React<\/a>. Cuando creas proyectos React con <a href=\"https:\/\/create-react-app.dev\/\" target=\"_blank\" rel=\"noopener noreferrer\">Create React App<\/a>, \u00e9stos admiten React Testing Library y Jest de forma predeterminada. Si creas un proyecto React sin Create React App, instala Jest para probar React con Babel y <a href=\"https:\/\/github.com\/kentcdodds\/react-testing-library\" target=\"_blank\" rel=\"noopener noreferrer\">React testing library<\/a>. Si clonas la rama <code>starter-app<\/code>, no necesitas instalar dependencias ni aplicar configuraciones.<\/p>\n<ol start=\"1\">\n<li>Si utilizas el proyecto de ejemplo, utiliza este comando para instalar las dependencias necesarias:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">npm install --save-dev babel-jest @babel\/preset-env @babel\/preset-react react-testing-library<\/code><\/pre>\n<p>Tambi\u00e9n puedes utilizar <a href=\"https:\/\/www.npmjs.com\/package\/enzyme\" target=\"_blank\" rel=\"noopener noreferrer\">Enzyme<\/a> en lugar de React Testing Library.<\/p>\n<ol start=\"2\">\n<li>Actualiza tus configuraciones de Babel en <strong>babel.config.js <\/strong>o crea este archivo si no existe:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">module.exports = {\n  presets: [\n    '@babel\/preset-env',\n      ['@babel\/preset-react', {runtime: 'automatic'}],\n  ],\n};<\/code><\/pre>\n<ol start=\"3\">\n<li>Considera el archivo <strong>src\/SubmitButton.js<\/strong>\u00a0que tiene el siguiente c\u00f3digo:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">import React, { useState } from 'react'\n\nexport default function SubmitButton(props) {\n  const {id, label, onSubmit} = props\n  const [isLoading, setisLoading] = useState(false)\n\n  const submit = () =&gt; {\n    setisLoading(true)\n    onSubmit()\n  }\n\n  return <button disabled=\"disabled\" data-testid=\"{id}\"><\/button><\/code><\/pre>\n<p>Este componente <code>SubmitButton<\/code> recibe tres props:<\/p>\n<ul>\n<li><code>id<\/code> &#8211; El identificador del bot\u00f3n.<\/li>\n<li><code>label<\/code> &#8211; Qu\u00e9 texto mostrar en el bot\u00f3n.<\/li>\n<li><code>onSubmit<\/code> &#8211; Qu\u00e9 funci\u00f3n activar cuando alguien pulse el bot\u00f3n.<\/li>\n<\/ul>\n<p>El c\u00f3digo asigna la propiedad <code>id<\/code> al atributo <code>data-testid<\/code>, que identifica un elemento para la prueba.<\/p>\n<p>El componente tambi\u00e9n rastrea el estado <code>isLoading<\/code> y lo actualiza a <code>true<\/code> cuando alguien pulsa el bot\u00f3n.<\/p>\n<ol start=\"4\">\n<li>Crea la prueba para este componente. Coloca el siguiente c\u00f3digo en un archivo <strong>SubmitButton.test.js<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-js\">import {fireEvent, render, screen} from \"@testing-library\/react\"\nimport \"@testing-library\/jest-dom\"\nimport SubmitButton from \".\/SubmitButton\"\n\ntest(\"SubmitButton becomes disabled after click\", () =&gt; {\n  const submitMock = jest.fn()\n\n  render(\n    &lt;SubmitButton\n      id=\"submit-details\"\n      label=\"Submit\"\n      onSubmit={submitMock}\n    \/ &gt;\n  )\n\n  expect(screen.getByTestId(\"submit-details\")).not.toBeDisabled()\n\n  fireEvent.submit(screen.getByTestId(\"submit-details\"))\n\n  expect(screen.getByTestId(\"submit-details\")).toBeDisabled()\n})<\/code><\/pre>\n<p>El c\u00f3digo anterior renderiza el componente <code>SubmitButton<\/code> y utiliza el m\u00e9todo de consulta <code>screen.getByTestId<\/code> para obtener el nodo DOM mediante el atributo <code>data-testid<\/code>.<\/p>\n<p>El primer <code>expect<\/code> es <code>getByTestId(\"submit-details\")<\/code> y utiliza el modificador <code>not<\/code> y el comparador <code>toBeDisabled<\/code> (expuesto desde <code>react-testing-library<\/code>) para afirmar que el bot\u00f3n no est\u00e1 desactivado. Utiliza el modificador <code>not<\/code> con cada emparejador para afirmar lo contrario del emparejador.<\/p>\n<p>A continuaci\u00f3n, el c\u00f3digo dispara el evento <code>submit<\/code> en el componente y comprueba que el bot\u00f3n est\u00e1 desactivado. Puedes encontrar m\u00e1s comparadores personalizados en <a href=\"https:\/\/github.com\/testing-library\/jest-dom#custom-matchers\" target=\"_blank\" rel=\"noopener noreferrer\">la documentaci\u00f3n de la biblioteca de pruebas<\/a>.<\/p>\n<ol start=\"5\">\n<li>Ahora, ejecuta las pruebas. Si has clonado la rama <code>starter-files<\/code>, aseg\u00farate de que tienes instaladas todas las dependencias del proyecto ejecutando <code>npm install<\/code> antes de iniciar las pruebas.<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 941px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-test-truncate-react.png\" alt=\"Resultado de la prueba Jest que muestra que se ha superado la prueba de un componente react.\" width=\"941\" height=\"353\"><figcaption class=\"wp-caption-text\">Resultado de la prueba Jest que muestra que se ha superado la prueba de un componente react.<\/figcaption><\/figure><\/figure>\n<h3>Ejecuta informes de cobertura del c\u00f3digo<\/h3>\n<p>Jest tambi\u00e9n ofrece informes de cobertura de c\u00f3digo para mostrar qu\u00e9 parte de tu proyecto est\u00e1s probando.<\/p>\n<ol start=\"1\">\n<li>Pasa la opci\u00f3n <code>--coverage<\/code> a Jest. En tu script Jest en <strong>package.json <\/strong>(en el proyecto JavaScript), actualiza el comando Jest con esta opci\u00f3n de cobertura:<\/li>\n<\/ol>\n<pre><code class=\"language-json\">\"scripts\": {\n  \"test\": \"jest --coverage\"\n}<\/code><\/pre>\n<ol start=\"2\">\n<li>Ejecuta <code>npm run test<\/code> para probar tu c\u00f3digo. Obtendr\u00e1s un informe como el siguiente<\/li>\n<\/ol>\n<figure>\n<figure style=\"width: 1183px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-test-coverage-report.png\" alt=\"Informe de cobertura satisfactoria de Jest para cada traje de prueba.\" width=\"1183\" height=\"631\"><figcaption class=\"wp-caption-text\">Informe de cobertura satisfactoria de Jest para cada traje de prueba.<\/figcaption><\/figure>\n<p>Este informe muestra que Jest ha probado el 100% de las funciones de <strong style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">SubmitButton.js<\/strong><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"> y <strong>string-format.<\/strong><\/span><strong style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">js<\/strong><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">. Tambi\u00e9n indica que Jest no ha probado ninguna declaraci\u00f3n ni l\u00ednea en <strong>string-format<\/strong><\/span><strong style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">.<\/strong><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\"><strong>js<\/strong>. La cobertura de las pruebas muestra que las l\u00edneas no probadas en <\/span><strong style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">string-format<\/strong><span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">.<strong>js<\/strong> son 7 y 12.<\/span><\/figure>\n<p>En la l\u00ednea 7, <code>return str<\/code> de la funci\u00f3n <code>truncate<\/code> no se ejecuta porque la condici\u00f3n <code>if (str.length &lt;= count)<\/code> devuelve <code>false<\/code>.<\/p>\n<p>En la l\u00ednea 12, tambi\u00e9n en la funci\u00f3n <code>truncate<\/code>, el <code>return substring<\/code> no se ejecuta porque la condici\u00f3n <code>if (!withEllipsis)<\/code> devuelve <code>false.<\/code><\/p>\n<h2>Integra Jest con Tu Flujo de Trabajo de Desarrollo<\/h2>\n<p>Veamos c\u00f3mo puedes integrar estas pruebas para mejorar tu flujo de trabajo de desarrollo.<\/p>\n<h3>Ejecuta pruebas en Watch Mode<\/h3>\n<p>En lugar de ejecutar manualmente las pruebas, puedes ejecutarlas autom\u00e1ticamente cuando cambies el c\u00f3digo utilizando el modo Watch Mode.<\/p>\n<ol start=\"1\">\n<li>Para activar el modo vigilancia, actualiza tu script de comandos Jest en <strong>package.json <\/strong>(en el proyecto JavaScript) a\u00f1adiendo la opci\u00f3n <code>--watchAll<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-json\">\"scripts\": {\n  \"test\": \"jest --coverage --watchAll\"\n}<\/code><\/pre>\n<ol start=\"2\">\n<li>Ejecuta <code>npm run test<\/code>. Activa Jest en Watch Mode:<\/li>\n<\/ol>\n<figure>\n<figure style=\"width: 1197px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-watch-mode.png\" alt=\"Ejecuta Jest en Watch Mode.\" width=\"1197\" height=\"730\"><figcaption class=\"wp-caption-text\">Ejecuta Jest en Watch Mode.<\/figcaption><\/figure>\n<p>Las pruebas se ejecutan cada vez que modificas tu proyecto. Este enfoque promueve la retroalimentaci\u00f3n continua a medida que construyes tu aplicaci\u00f3n.<\/figure>\n<h3>Configura Ganchos Pre-Commit<\/h3>\n<p>En los entornos Git, los ganchos ejecutan secuencias de comandos cada vez que se produce un evento concreto (como pull, push o commit). Los ganchos de pre-commit definen qu\u00e9 scripts se ejecutan para el evento de pre-commit (que el c\u00f3digo activa antes de hacer una confirmaci\u00f3n).<\/p>\n<p>La confirmaci\u00f3n s\u00f3lo tiene \u00e9xito si el script no lanza un error.<\/p>\n<p>Ejecutar Jest antes de la confirmaci\u00f3n previa garantiza que ninguna de tus pruebas falle antes de la confirmaci\u00f3n.<\/p>\n<p>Puedes utilizar varias bibliotecas para configurar ganchos git en tu proyecto, como <a href=\"https:\/\/www.npmjs.com\/package\/ghooks\" target=\"_blank\" rel=\"noopener noreferrer\">ghooks<\/a>.<\/p>\n<ol start=\"1\">\n<li>Instala <code>ghooks<\/code> en <code>devDependencies<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">npm install ghooks --save-dev<\/code><\/pre>\n<ol start=\"2\">\n<li>A\u00f1ade un objeto <code>configs<\/code> en el nivel superior de tu archivo <strong>package.json<\/strong> (en el proyecto JavaScript).<\/li>\n<li>A\u00f1ade un objeto <code>ghooks<\/code> debajo de <code>configs<\/code>.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>A\u00f1ade una propiedad con una clave de <code>pre-commit<\/code> y un valor de <code>jest<\/code>.<\/li>\n<\/ol>\n<pre><code class=\"language-json\">{\n  \u2026\n  \"config\": {\n    \"ghooks\": {\n      \"pre-commit\": \"jest\"\n    }\n  },\n}<\/code><\/pre>\n<ol start=\"5\">\n<li>Confirma el c\u00f3digo. El c\u00f3digo activa el gancho pre-commit, que ejecuta Jest:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1183px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/jest-test-pre-commit.png\" alt=\"Ejecutar Jest durante el pre-commit usando ghooks.\" width=\"1183\" height=\"803\"><figcaption class=\"wp-caption-text\">Ejecutar Jest durante el pre-commit usando ghooks.<\/figcaption><\/figure><\/figure>\n<h2>Resumen<\/h2>\n<p>Ahora ya sabes c\u00f3mo integrar Jest en tu flujo de trabajo de desarrollo para que se ejecute autom\u00e1ticamente cada vez que hagas un cambio. Este enfoque proporciona una retroalimentaci\u00f3n continua para que puedas corregir r\u00e1pidamente cualquier problema de c\u00f3digo antes de lanzar tus cambios a producci\u00f3n.<\/p>\n<p><a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojando tu aplicaci\u00f3n con Kinsta<\/a>, te beneficias de una infraestructura r\u00e1pida y segura, desplegando tus proyectos en una infraestructura construida sobre la red Premium Tier de Google Cloud Platform y m\u00e1quinas C2. Elige entre los centros de datos de 27 y una CDN habilitada para HTTP\/3 con PoPs de 300.<\/p>\n<p>Mantente seguro con la tecnolog\u00eda de contenedores aislados, dos potentes cortafuegos y la protecci\u00f3n DDoS avanzada de Cloudflare. Y puedes integrar aplicaciones o automatizar flujos de trabajo con la <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\">API Kinsta<\/a>.<\/p>\n<p>Configura Jest y explora los recursos de Kinsta hoy mismo para <a href=\"https:\/\/kinsta.com\/javascript\/\">mejorar tus aplicaciones JavaScript<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Las pruebas de software son vitales para garantizar que tus aplicaciones funcionan seg\u00fan lo esperado, especialmente cuando introduces cambios. Detectar y corregir errores en una fase &#8230;<\/p>\n","protected":false},"author":290,"featured_media":70135,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1296,1297],"class_list":["post-70134","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-frameworks-javascript","topic-tutoriales-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C\u00f3mo Probar Tus Aplicaciones con Jest- Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Exploremos el popular framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/jest\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo Probar Tus Aplicaciones con Jest\" \/>\n<meta property=\"og:description\" content=\"Exploremos el popular framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/jest\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-13T09:39:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-19T10:11:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marcia Ramos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Exploremos el popular framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcia Ramos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/\"},\"author\":{\"name\":\"Marcia Ramos\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\"},\"headline\":\"C\u00f3mo Probar Tus Aplicaciones con Jest\",\"datePublished\":\"2023-09-13T09:39:30+00:00\",\"dateModified\":\"2023-09-19T10:11:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/\"},\"wordCount\":3226,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/jest\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/jest\/\",\"name\":\"C\u00f3mo Probar Tus Aplicaciones con Jest- Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg\",\"datePublished\":\"2023-09-13T09:39:30+00:00\",\"dateModified\":\"2023-09-19T10:11:29+00:00\",\"description\":\"Exploremos el popular framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/jest\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/jest\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frameworks JavaScript\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/frameworks-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo Probar Tus Aplicaciones con Jest\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\",\"name\":\"Marcia Ramos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"caption\":\"Marcia Ramos\"},\"description\":\"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/marciadiasramos\/\"],\"honorificSuffix\":\"B.Sc.\",\"gender\":\"Female\",\"knowsLanguage\":[\"English\",\"Portuguese\"],\"jobTitle\":\"Editorial Team Lead\",\"worksFor\":\"Kinsta Inc.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/marciaramos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo Probar Tus Aplicaciones con Jest- Kinsta\u00ae","description":"Exploremos el popular framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.","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":"https:\/\/kinsta.com\/es\/blog\/jest\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo Probar Tus Aplicaciones con Jest","og_description":"Exploremos el popular framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.","og_url":"https:\/\/kinsta.com\/es\/blog\/jest\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-09-13T09:39:30+00:00","article_modified_time":"2023-09-19T10:11:29+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg","type":"image\/jpeg"}],"author":"Marcia Ramos","twitter_card":"summary_large_image","twitter_description":"Exploremos el popular framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Marcia Ramos","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/jest\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/jest\/"},"author":{"name":"Marcia Ramos","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116"},"headline":"C\u00f3mo Probar Tus Aplicaciones con Jest","datePublished":"2023-09-13T09:39:30+00:00","dateModified":"2023-09-19T10:11:29+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/jest\/"},"wordCount":3226,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/jest\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/jest\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/jest\/","url":"https:\/\/kinsta.com\/es\/blog\/jest\/","name":"C\u00f3mo Probar Tus Aplicaciones con Jest- Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/jest\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/jest\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg","datePublished":"2023-09-13T09:39:30+00:00","dateModified":"2023-09-19T10:11:29+00:00","description":"Exploremos el popular framework Jest, sus caracter\u00edsticas y la mejor forma de integrarlo en tu flujo de trabajo de desarrollo.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/jest\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/jest\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/jest\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/09\/jest.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/jest\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Frameworks JavaScript","item":"https:\/\/kinsta.com\/es\/secciones\/frameworks-javascript\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo Probar Tus Aplicaciones con Jest"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116","name":"Marcia Ramos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","caption":"Marcia Ramos"},"description":"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.","sameAs":["https:\/\/www.linkedin.com\/in\/marciadiasramos\/"],"honorificSuffix":"B.Sc.","gender":"Female","knowsLanguage":["English","Portuguese"],"jobTitle":"Editorial Team Lead","worksFor":"Kinsta Inc.","url":"https:\/\/kinsta.com\/es\/blog\/author\/marciaramos\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/70134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/290"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=70134"}],"version-history":[{"count":14,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/70134\/revisions"}],"predecessor-version":[{"id":70204,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/70134\/revisions\/70204"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/70134\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/70134\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/70134\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/70134\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/70134\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/70134\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/70134\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/70134\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/70135"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=70134"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=70134"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=70134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}