{"id":231862,"date":"2023-01-10T15:56:00","date_gmt":"2023-01-10T12:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231862"},"modified":"2022-11-10T05:30:14","modified_gmt":"2022-11-10T02:30:14","slug":"pruebas-sencillas-de-unidades-de-javascript-en-wordpress-con-jest","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/pruebas-sencillas-de-unidades-de-javascript-en-wordpress-con-jest\/","title":{"rendered":"Pruebas sencillas de unidades de JavaScript en WordPress con Jest"},"content":{"rendered":"\n<p>WordPress tiene un largo historial de pruebas unitarias de su c\u00f3digo PHP. Sin embargo, escribir pruebas unitarias de JavaScript y pruebas de integraci\u00f3n para el c\u00f3digo en temas y complementos no disfruta del mismo estado. Veamos c\u00f3mo probar JavaScript en nuestros complementos y temas de WordPress usando Jest.<\/p>\n<p>Estos son los contenidos que trataremos en este art\u00edculo:<\/p>\n<h2>Pruebas unitarias de JavaScript en WordPress<\/h2>\n<p>Entonces, \u00bfpor qu\u00e9 escribir pruebas unitarias y pruebas de integraci\u00f3n? Son excelentes para garantizar que una funci\u00f3n, un m\u00e9todo de clase o incluso un componente de React hagan lo que se supone que deben hacer. Ayuda a detectar errores en el c\u00f3digo y tambi\u00e9n ayuda a preservar la integridad cuando se introducen cambios m\u00e1s tarde en el c\u00f3digo al verificar que sigue funcionando seg\u00fan lo previsto despu\u00e9s de la actualizaci\u00f3n.<\/p>\n<p><a href=\"https:\/\/startfunction.com\/category\/wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Los complementos y temas de WordPress<\/a> est\u00e1n escritos principalmente en PHP y pueden usar la suite PHPUnit para ejecutar pruebas, hacer afirmaciones, burlar funciones y m\u00e1s. El manual incluso tiene una secci\u00f3n que explica c\u00f3mo <a href=\"https:\/\/make.wordpress.org\/cli\/handbook\/plugin-unit-tests\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">configurar r\u00e1pidamente las pruebas unitarias con WP-CLI<\/a>.<\/p>\n<p>Para JavaScript, hay una p\u00e1gina sobre c\u00f3mo <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/testing\/automated-testing\/qunit\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ejecutar pruebas QUnit<\/a> en el Manual, aunque se trata m\u00e1s de probar el c\u00f3digo JavaScript en el n\u00facleo de WordPress.<\/p>\n<p>Si bien nada de esto est\u00e1 estandarizado para JavaScript en WordPress, podemos escribir excelentes pruebas unitarias utilizando el conjunto de pruebas Jest. En este art\u00edculo, aprenderemos c\u00f3mo escribir pruebas unitarias de JavaScript para un complemento de ejemplo que carga 5 publicaciones a trav\u00e9s de la API REST de WP utilizando la <code>fetch<\/code>funci\u00f3n de JavaScript y las representa en un determinado elemento DOM en la p\u00e1gina.<\/p>\n<h2>Beneficios de usar Jest para pruebas unitarias de JavaScript en WordPress<\/h2>\n<p>En el pasado, escribir pruebas unitarias de JavaScript implicaba configurar Mocha para ejecutar pruebas, Chai para hacer afirmaciones y Sinon para simular funciones y espiarlas. Si bien ofrecen una gran flexibilidad, es mucho m\u00e1s complejo trabajar con tres paquetes que con uno. <a href=\"https:\/\/jestjs.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Jest<\/a> proporciona todo esto en un solo paquete:<\/p>\n<ul>\n<li>puede ejecutar pruebas declar\u00e1ndolos con <code>describe<\/code>y <code>it<\/code>o<code>test<\/code><\/li>\n<li>puedes hacer afirmaciones con <code>expect<\/code>y <code>toBe<\/code>, <code>toHaveLength<\/code>y muchas m\u00e1s<\/li>\n<li>puede simular funciones y espiarlas, y hay varias formas de hacerlo<\/li>\n<\/ul>\n<h3>Antes de continuar<\/h3>\n<p>Para mantener este art\u00edculo centrado en las pruebas con Jest, hay una configuraci\u00f3n adicional externa al proceso de prueba como Babel o Webpack que no se tratar\u00e1 aqu\u00ed. Todo esto se puede encontrar en <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el repositorio de WP Jest Tests<\/a> que acompa\u00f1a a este art\u00edculo. Para mantener las cosas contextuales, cada secci\u00f3n se vincular\u00e1 a uno de los archivos relevantes que escribiremos.<\/p>\n<h2>Descripci\u00f3n general del lado de PHP<\/h2>\n<p>El <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\/blob\/master\/wp-jest-tests.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP para el complemento de ejemplo<\/a> que usaremos para aprender a escribir las pruebas unitarias de JavaScript es bastante est\u00e1ndar. Las \u00fanicas l\u00edneas interesantes son aquellas cuando ponemos en cola nuestro archivo JavaScript y agregamos un script en l\u00ednea para pasarle variables:<\/p>\n<pre><code>$initial_state = rawurlencode( wp_json_encode( array(\n    'restUrl' =&gt; esc_url_raw( rest_url() ),\n    'posts'   =&gt; 5,)) );\nwp_enqueue_script( \n    'wp-jest-tests',\n    plugins_url( 'front.js', __FILE__ ),\n    array(),\n    $plugin_version,\n    true\n);\nwp_add_inline_script(\n    'wp-jest-tests',\n    'window.wpJestTests = JSON.parse(decodeURIComponent(\"'. $initial_state. '\"));',\n    'before'\n);<\/code><\/pre>\n<p>Despu\u00e9s de enquear nuestro archivo JavaScript, agregamos una variable global <code>wpJestTests<\/code>con <code>wp_add_inline_script()<\/code>. Esta variable es particularmente interesante y dif\u00edcil de manejar porque es externa a nuestro archivo JavaScript y tendremos que simularla en nuestras pruebas.<\/p>\n<h2>Configurar pruebas Jest<\/h2>\n<p>Primero tendremos que inicializar <code>npm<\/code>nuestro proyecto de complemento para poder instalar Jest con \u00e9l. Navegue en la l\u00ednea de comando a su carpeta de complementos y ejecute:<\/p>\n<p><code>npm init<\/code>y siga la serie de indicaciones aqu\u00ed<\/p>\n<p>Edite el archivo <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\/blob\/master\/package.json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">package.json<\/a> que se cre\u00f3 y agregue una nueva entrada para ejecutar nuestras pruebas en la <code>scripts<\/code>secci\u00f3n:<\/p>\n<p><code>\"test\": \"jest\"<\/code><\/p>\n<p>Este ser\u00e1 el comando que usaremos para decirle a Jest que ejecute nuestras pruebas unitarias de JavaScript. Esta es una ejecuci\u00f3n \u00fanica, pero Jest tambi\u00e9n admite la visualizaci\u00f3n de archivos, por lo que puede ingresar uno adicional:<\/p>\n<p><code>\"test-watch\": \"jest --watch\"<\/code><\/p>\n<p>Ahora instale Jest como una dependencia de desarrollo ejecutando<\/p>\n<p><code>npm install -D jest<\/code><\/p>\n<p>Mientras se instala, cree un archivo llamado <code>jest.config.js<\/code>. Esto mantendr\u00e1 toda la configuraci\u00f3n necesaria. Agregue lo siguiente:<\/p>\n<pre><code>module.exports = {\n    verbose: true,\n    setupFiles: [\n        '\/__mocks__\/globals.js'\n    ],\n    moduleNameMapper: {\n        '.(css|less|sass|scss)$': '\/__mocks__\/styleMock.js'\n   }\n};<\/code><\/pre>\n<p>Repasemos cada uno:<\/p>\n<ul>\n<li><code>verbose<\/code>: indica si se debe informar cada prueba individual durante la ejecuci\u00f3n. Todos los errores tambi\u00e9n se seguir\u00e1n mostrando en la parte inferior despu\u00e9s de la ejecuci\u00f3n. Tenga en cuenta que si solo se est\u00e1 ejecutando un archivo de prueba, el valor predeterminado es <code>true<\/code>.<\/li>\n<li><code>setupFiles<\/code>: una lista de rutas a m\u00f3dulos que ejecutan alg\u00fan c\u00f3digo para configurar o configurar el entorno de prueba. Cada archivo de configuraci\u00f3n se ejecutar\u00e1 una vez por archivo de prueba. Dado que cada prueba se ejecuta en su propio entorno, estos scripts se ejecutar\u00e1n en el entorno de prueba inmediatamente antes de ejecutar el c\u00f3digo de prueba. Usaremos esto para declarar variables globales renderizadas por PHP y WordPress con comandos como <code>wp_add_inline_script<\/code>o <code>wp_localize_script<\/code>.<\/li>\n<li><code>moduleNameMapper<\/code>: este es un mapa de expresiones regulares a nombres de m\u00f3dulos (o matrices de nombres de m\u00f3dulos) que permiten extraer recursos est\u00e1ticos, como im\u00e1genes o estilos con un solo m\u00f3dulo.<\/li>\n<\/ul>\n<p>Seguramente not\u00f3 la referencia: este es un token especial que es reemplazado por Jest con la ra\u00edz de su proyecto, que generalmente es la ubicaci\u00f3n de su archivo <code>package.json<\/code>.<\/p>\n<p>Profundizaremos en las siguientes dos secciones, pero primero, cree la carpeta y estos dos archivos a los que se hace referencia anteriormente:<\/p>\n<ul>\n<li>crear una carpeta llamada<code>__mocks__<\/code><\/li>\n<li>dentro de la carpeta, crea los archivos <code>styleMock.js<\/code>y<code>globals.js<\/code><\/li>\n<\/ul>\n<h2>Importaci\u00f3n de estilos simulados para pruebas Jest<\/h2>\n<p>Si, como este complemento, usa Webpack para compilar todo, incluidos los estilos, y est\u00e1 importando el <code>.scss<\/code>archivo en el <code>.js<\/code>archivo:<\/p>\n<pre><code>import '.\/main.scss';<\/code><\/pre>\n<p>necesita usar <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\/blob\/master\/__mocks__\/styleMock.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">styleMock.js<\/a> para simular archivos SASS al importarlos en nuestro archivo JavaScript; de lo contrario, Jest se bloquear\u00e1 porque no podr\u00e1 resolver el m\u00f3dulo. No necesita mucho para este archivo, solo agregue<\/p>\n<p>Jest usar\u00e1 este simulacro cada vez que encuentre una <code>.scss<\/code>importaci\u00f3n y los asignar\u00e1 al simulacro, permiti\u00e9ndole avanzar con las pruebas sin preocuparse por los estilos.<\/p>\n<h2>Configurar globales para Jest<\/h2>\n<p>Trabajemos ahora en el archivo <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\/blob\/master\/__mocks__\/globals.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">globals.js<\/a>. Una de las ventajas de usar Jest es que ya viene con una <code>jsdom<\/code>implementaci\u00f3n de est\u00e1ndares web de JavaScript puro ya configurada, que simula un entorno DOM como si estuviera en el navegador, y lo usaremos para simular elementos DOM. para nuestras pruebas.<\/p>\n<p>Cree una carpeta <code>__mocks__<\/code>y un <code>globals.js<\/code>archivo dentro de ella. Agregue esto al archivo:<\/p>\n<pre><code>import { JSDOM } from 'jsdom';\nconst dom = new JSDOM();\nglobal.document = dom.window.document;\nglobal.window = dom.window;\nglobal.window.wpJestTests = undefined;<\/code><\/pre>\n<p>Esto declarar\u00e1 y simular\u00e1 algunos objetos y m\u00e9todos que luego usar\u00e1 en sus pruebas. El \u00faltimo es de especial inter\u00e9s.<\/p>\n<pre><code>global.window.wpJestTests = undefined;<\/code><\/pre>\n<p>Esta es la variable global que escribimos usando <code>wp_add_inline_script<\/code>. Debe simularlo como una variable global para poder usarlo en sus pruebas.<\/p>\n<h2>Descripci\u00f3n general del archivo JavaScript<\/h2>\n<p>El complemento de WordPress tiene un solo archivo JavaScript <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\/blob\/master\/src\/main.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">main.js<\/a> en una <code>\/src<\/code>carpeta. Esto luego se transpila y se genera en un <code>\/js\/front.js<\/code>archivo que es lo que cargar\u00e1 el PHP. El JavaScript carga cinco publicaciones de WordPress usando <code>fetch<\/code>, una funci\u00f3n est\u00e1ndar de JavaScript, a trav\u00e9s de la API REST de WP e inserta su t\u00edtulo, con un enlace a la publicaci\u00f3n, en un archivo <code>div.entry-content<\/code>.<\/p>\n<p>Vas a exportar la funci\u00f3n que hace todo el trabajo:<\/p>\n<pre><code>export const wpJestTestsInit =() =&gt; {<\/code><\/pre>\n<p>para que puedas usarlo en tus pruebas en Jest.<\/p>\n<h2>Escribiendo pruebas unitarias de JavaScript con Jest, \u00a1por fin!<\/h2>\n<p>\u00a1Ahora puedes empezar a escribir pruebas! Jest puede encontrar pruebas de muchas maneras:<\/p>\n<ul>\n<li>si el nombre del archivo es<code>test.js<\/code><\/li>\n<li>o tiene el prefijo del nombre del archivo que prueba, como<code>main.test.js<\/code><\/li>\n<li>si son <code>.js<\/code>archivos ubicados en una carpeta llamada<code>__tests__<\/code><\/li>\n<\/ul>\n<p>Cree la <code>__tests__<\/code>carpeta y dentro de ella, un archivo <code>front.test.js<\/code>. Puede ver <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\/blob\/master\/__tests__\/front.test.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el archivo JavaScript terminado para las pruebas de Jest<\/a> en el repositorio complementario. Ve\u00e1moslo en bloques. La primera l\u00ednea importa el archivo JS que queremos probar:<\/p>\n<pre><code>import { wpJestTestsInit } from '..\/src\/main';<\/code><\/pre>\n<p>A continuaci\u00f3n, borramos todos los simulacros, para que nunca ejecutemos simulacros sucios que contengan valores de pruebas anteriores. Hacer esto puede generar errores ya que, por ejemplo, si estamos espiando cu\u00e1ntas veces se llam\u00f3 a una funci\u00f3n simulada, podr\u00edamos obtener una lectura incorrecta si no borramos el simulacro entre prueba y prueba:<\/p>\n<pre><code>afterEach(() =&gt; {\n    jest.clearAllMocks();\n} );<\/code><\/pre>\n<p>La primera prueba que escribiremos hace afirmaciones b\u00e1sicas cuando algunas cosas fallan. Por ejemplo, si la variable global <code>wpJestTests<\/code>con la que est\u00e1bamos escribiendo <code>wp_add_inline_script<\/code>no se escribi\u00f3 por alguna raz\u00f3n:<\/p>\n<pre><code>describe( 'Initialization', () =&gt; {\n    test( 'if wpJestTests is undefined, nothing happens', () =&gt; {\n        expect( wpJestTestsInit() ).toBe( false );\n    } );\n\n    test( 'if .entry-content is missing, nothing happens', () =&gt; {\n        wpJestTests = { posts: 5 };\n        const mockQuerySelector = jest.spyOn( document, 'querySelector') .mockImplementation( () =&gt; undefined );\n        expect( wpJestTestsInit() ).toBe( false );\n        expect( mockQuerySelector ).toHaveBeenCalledTimes( 1 );\n    } );\n} );<\/code><\/pre>\n<p>En este c\u00f3digo,<\/p>\n<ul>\n<li><code>describe<\/code>crea un grupo compuesto por varias pruebas relacionadas<\/li>\n<li><code>test<\/code>es lo que realmente realiza una prueba<\/li>\n<li><code>expect<\/code>envuelve nuestro sujeto de prueba proporcionando acceso a una serie de &quot;coincidencias&quot; que le permiten hacer diferentes afirmaciones sobre su contenido<\/li>\n<li><code>toBe<\/code>es uno de estos emparejadores. Jest tiene muchos <a href=\"https:\/\/jestjs.io\/docs\/en\/expect\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comparadores incluidos<\/a>, e incluso hay otros que puedes agregar con <a href=\"https:\/\/github.com\/jest-community\/jest-extended#jest-extended\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">un paquete de terceros<\/a>.<\/li>\n<\/ul>\n<p>La primera prueba no define nada, por <code>wpJestTests<\/code>lo que su valor ser\u00e1 el que defini\u00f3 en <code>globals.js<\/code>. Como es <code>undefined<\/code>, no podemos trabajar, por lo que queremos confirmar que la funci\u00f3n regresa sin hacer nada.<\/p>\n<p>La segunda prueba define <code>wpJestTests<\/code>y simula el <code>document.querySelector<\/code>m\u00e9todo para devolver <code>undefined<\/code>lo que devolver\u00eda si no pudiera encontrar un elemento en el DOM. En tal caso, queremos confirmar que estamos regresando sin hacer nada, y que nuestra funci\u00f3n de simulaci\u00f3n <code>document.querySelector<\/code>fue llamada una vez.<\/p>\n<h2>Mock fetch en las pruebas de Jest<\/h2>\n<p>El siguiente conjunto de pruebas comienza con<\/p>\n<pre><code>describe( 'Fetch posts', () =&gt; {<\/code><\/pre>\n<p>y dentro de esto, tenemos otra funci\u00f3n de desmontaje:<\/p>\n<pre><code>afterAll( () =&gt; {\n    global.fetch.mockClear();\n    delete global.fetch;\n});<\/code><\/pre>\n<p>a diferencia <code>afterEach<\/code>de esto se ejecutar\u00e1 despu\u00e9s de que se hayan ejecutado todas las pruebas dentro de este <code>describe<\/code>bloque. Dado que nuestro archivo JavaScript se usa <code>fetch<\/code>para cargar las publicaciones, debemos verificar que se haya llamado y haya devuelto lo que solicitamos, por lo que vamos a simular la <code>fetch<\/code>funci\u00f3n:<\/p>\n<pre><code>global.fetch = jest.fn().mockImplementation(\n    () =&gt; Promise.resolve({\n        ok: true,\n        status: 200,\n        json: () =&gt; Promise.resolve( [\n            {\n                link: 'test-1',\n                title: { rendered: 'Post 1' }\n            },\n            {\n                link: 'test-2',\n                title: { rendered: 'Post 2' }\n            },\n            {\n                link: 'test-3',\n                title: { rendered: 'Post 3' }\n            },\n            {\n                link: 'test-4',\n                title: { rendered: 'Post 4' }\n            },\n            {\n                link: 'test-5',\n                title: { rendered: 'Post 5' }\n            },\n        ] ),\n    })\n);<\/code><\/pre>\n<p>Simulamos la primera Promesa que se resuelve en la respuesta, y la segunda en una representaci\u00f3n JSON de los datos. Estos datos son similares a los que obtenemos de la API REST de WP. Dado que nuestro c\u00f3digo solo necesita el t\u00edtulo y el enlace, nos estamos burlando de eso.<\/p>\n<h2>Prueba de integraci\u00f3n de JavaScript con Jest en c\u00f3digo as\u00edncrono que usa fetch<\/h2>\n<p>Ahora podemos escribir la prueba usando el archivo simulado <code>fetch<\/code>. Hay una gran diferencia con esta prueba en comparaci\u00f3n con otras pruebas unitarias de JavaScript: esta es una prueba de integraci\u00f3n. Las pruebas anteriores exploradas aqu\u00ed simplemente aseguraron que un componente funcionaba bien. Verificamos que si la variable global de estado inicial no estaba definida, nuestro componente no se renderizar\u00eda. Esto es diferente porque vamos a probar c\u00f3mo funciona todo el sistema cuando se define la variable de estado inicial, activando as\u00ed una transacci\u00f3n de datos y finalmente insertando los t\u00edtulos de las publicaciones con sus enlaces en el documento.<\/p>\n<p>Desde el principio, esto es diferente: la funci\u00f3n an\u00f3nima pasada a <code>test<\/code>recibe un <code>done<\/code>par\u00e1metro. Esta es en realidad una funci\u00f3n que se llamar\u00e1 cuando finalicemos la prueba. Jest esperar\u00e1 hasta <code>done<\/code>que se llame antes de terminar la prueba. Si <code>done<\/code>nunca se llama, la prueba fallar\u00e1 con un error de tiempo de espera. Eso es interesante para nosotros ya que estamos probando c\u00f3digo que involucra <code>fetch<\/code>, que es una funci\u00f3n as\u00edncrona.<\/p>\n<pre><code>test( 'if posts are fetch, inserts them', done =&gt; {\n    wpJestTests = { posts: 5 };\n    const mockClassListAdd = jest.fn();\n    const divElem = {\n        tagName: 'DIV',\n        classList: { add: mockClassListAdd },\n        innerHTML: ''\n    };\n    const mockQuerySelector = jest.spyOn( document, 'querySelector') .mockImplementation( () =&gt; divElem );\n\n    expect( wpJestTestsInit() ).toBe( true );\n\n    process.nextTick(() =&gt; {\n        expect( mockQuerySelector ).toHaveBeenCalledTimes( 1 );\n        expect( global.fetch ).toHaveBeenCalledTimes( 1 );\n        expect( mockClassListAdd ).toHaveBeenCalledTimes( 1 );\n        expect( divElem.innerHTML.match( \/test-[1-5]\/g ).length ).toBe( 5 );\n\n        done();\n    });\n} );<\/code><\/pre>\n<p>El global <code>wpJestTests<\/code>est\u00e1 definido y nuestro simulado <code>document.querySelector<\/code>ahora devuelve lo que se parece a un elemento HTML, con even <code>classList<\/code>y su <code>add<\/code>m\u00e9todo secundario.<\/p>\n<p>Llamamos <code>wpJestTestsInit<\/code>y esperamos que termine correctamente. Ahora, dado que es as\u00edncrono, <code>fetch<\/code>vamos a utilizar <code>process.nextTick<\/code>desde <a href=\"https:\/\/nodejs.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Node.js.<\/a> En <code>nextTick<\/code>Node.js es la cola que se ejecutar\u00e1 despu\u00e9s de que hayan finalizado todos los eventos en el bucle de eventos actual. Esto es genial porque todas nuestras promesas se resolver\u00edan entonces, que es exactamente lo que necesitamos para probar este c\u00f3digo que involucra <code>fetch<\/code>.<\/p>\n<p>El resto son m\u00e1s afirmaciones para garantizar que se <code>querySelector<\/code>encontr\u00f3 algo con lo que trabajar, que de <code>fetch<\/code>hecho se llam\u00f3, que se agreg\u00f3 una clase a la lista y que los t\u00edtulos y enlaces de nuestras publicaciones se insertaron en el elemento HTML correspondiente. Una vez que todo est\u00e1 hecho, llamamos <code>done<\/code>y nuestra prueba as\u00edncrona finaliza.<\/p>\n<h2>Ejecute sus pruebas Jest<\/h2>\n<p>Ahora puedes escribir<\/p>\n<p><code>npm run test<\/code><\/p>\n<p>y Jest ejecutar\u00e1 las pruebas unitarias de JavaScript para su complemento de WordPress<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157897-61e6c3c169e87.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-157897-61e6c3c169e87.png\" alt=\"Pruebas sencillas de unidades de JavaScript en WordPress con Jest\" ><\/a><\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Entonces, Jest es una soluci\u00f3n excelente y simple para escribir pruebas que cubran el c\u00f3digo JavaScript de nuestros complementos o temas de WordPress. Pero hay m\u00e1s Si estamos escribiendo una aplicaci\u00f3n React para nuestro complemento, es posible que queramos hacer afirmaciones al respecto. Jest tambi\u00e9n puede ayudar hasta cierto punto, y si necesitamos m\u00e1s, podemos agregar Enzyme a nuestras herramientas y comenzar a escribir pruebas de integraci\u00f3n con \u00e9l.<\/p>\n<p>\u00a1Por favor done!<\/p>\n<p>\u00a1Si esto te result\u00f3 \u00fatil, no dudes en comprarme un caf\u00e9 <img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"Pruebas sencillas de unidades de JavaScript en WordPress con Jest\" \/>para que pueda mantenerme despierto y crear m\u00e1s tutoriales \u00fatiles para ti!<\/p>\n<p>$3.00<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Asegure la estabilidad del c\u00f3digo JavaScript en su complemento de WordPress escribiendo pruebas unitarias de JavaScript usando Jest.<\/p>\n","protected":false},"author":1,"featured_media":157898,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,747,727,1015,840,861],"tags":[1172],"class_list":["post-231862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-fuente-abierta","category-javascript-2","category-sitios-utiles","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231862"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231862\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/157898"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}