{"id":232385,"date":"2023-01-10T16:01:00","date_gmt":"2023-01-10T13:01:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232385"},"modified":"2022-11-10T09:08:26","modified_gmt":"2022-11-10T06:08:26","slug":"semplici-unit-test-javascript-in-wordpress-con-jest","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/semplici-unit-test-javascript-in-wordpress-con-jest\/","title":{"rendered":"Semplici unit test JavaScript in WordPress con Jest"},"content":{"rendered":"\n<p>WordPress ha una lunga esperienza di unit test del suo codice PHP. Tuttavia, la scrittura di unit test JavaScript e test di integrazione per il codice in temi e plugin non gode dello stesso stato. Vediamo come testare JavaScript nei nostri plugin e temi WordPress usando Jest.<\/p>\n<p>Questi sono i contenuti che tratteremo in questo articolo:<\/p>\n<h2>Test unitari JavaScript in WordPress<\/h2>\n<p>Allora perch\u00e9 scrivere unit test e test di integrazione? Sono ottimi per garantire che una funzione, un metodo di classe o anche un componente React esegua ci\u00f2 che dovrebbero fare. Aiuta a rilevare gli errori nel codice e aiuta anche a preservare l&#8217;integrit\u00e0 quando le modifiche vengono introdotte successivamente nel codice verificando che funzioni ancora come previsto dopo l&#8217;aggiornamento.<\/p>\n<p><a href=\"https:\/\/startfunction.com\/category\/wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a>I plugin e i temi di <a href=\"https:\/\/startfunction.com\/category\/wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress sono per lo pi\u00f9 scritti in PHP e possono utilizzare la suite PHPUnit per eseguire test, fare asserzioni, funzioni beffarde e altro ancora.<\/a> Il manuale ha anche una sezione che spiega come impostare rapidamente <a href=\"https:\/\/make.wordpress.org\/cli\/handbook\/plugin-unit-tests\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">i test delle unit\u00e0 con WP-CLI<\/a>.<\/p>\n<p>Per JavaScript, c&#8217;\u00e8 una pagina <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/testing\/automated-testing\/qunit\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sull&#8217;esecuzione dei test QUnit<\/a> nel Manuale, anche se si tratta pi\u00f9 di testare il codice JavaScript nel core di WordPress.<\/p>\n<p>Sebbene nulla di tutto ci\u00f2 sia standardizzato per JavaScript in WordPress, possiamo scrivere ottimi unit test utilizzando la suite di test Jest. In questo articolo impareremo come scrivere unit test JavaScript per un plug-in di esempio che carica 5 post tramite l&#8217;API REST di WP utilizzando la <code>fetch<\/code>funzione di JavaScript e li rende in un determinato elemento DOM nella pagina.<\/p>\n<h2>Vantaggi dell&#8217;utilizzo di Jest per i test unitari JavaScript in WordPress<\/h2>\n<p>In passato, la scrittura di unit test JavaScript implicava l&#8217;impostazione di Mocha per eseguire test, Chai per fare asserzioni e Sinon per deridere le funzioni e spiarle. Sebbene offrano una grande flessibilit\u00e0, \u00e8 molto pi\u00f9 complesso lavorare con tre pacchetti rispetto a uno. <a href=\"https:\/\/jestjs.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Jest<\/a> fornisce tutto questo in un unico pacchetto:<\/p>\n<ul>\n<li>puoi eseguire dei test dichiarandoli con <code>describe<\/code>e <code>it<\/code>o<code>test<\/code><\/li>\n<li>puoi fare affermazioni con <code>expect<\/code>e <code>toBe<\/code>, <code>toHaveLength<\/code>e molti altri<\/li>\n<li>puoi deridere le funzioni e spiarle, e ci sono diversi modi per farlo<\/li>\n<\/ul>\n<h3>Prima di andare avanti<\/h3>\n<p>Per mantenere questo articolo incentrato sui test con Jest, c&#8217;\u00e8 una configurazione aggiuntiva esterna al processo di test come Babel o Webpack che non sar\u00e0 trattata qui. Tutto questo pu\u00f2 essere trovato nel <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repository WP Jest Tests<\/a> che accompagna questo articolo. Per mantenere le cose contestuali, ogni sezione si collegher\u00e0 a uno dei file rilevanti che scriveremo.<\/p>\n<h2>Panoramica del lato PHP<\/h2>\n<p>Il <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 per il plugin di esempio<\/a> che useremo per imparare a scrivere gli unit test JavaScript \u00e8 abbastanza standard. Le uniche righe interessanti sono quelle in cui accodiamo il nostro file JavaScript e aggiungiamo uno script inline per passarci variabili:<\/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>Dopo aver inserito il nostro file JavaScript, aggiungiamo una variabile globale <code>wpJestTests<\/code>con <code>wp_add_inline_script()<\/code>. Questa variabile \u00e8 particolarmente interessante e difficile da gestire perch\u00e9 \u00e8 esterna al nostro file JavaScript e dovremo prenderla in giro nei nostri test.<\/p>\n<h2>Imposta i test Jest<\/h2>\n<p>Dovremo prima inizializzare <code>npm<\/code>nel nostro progetto di plugin per poter installare Jest con esso. Passare dalla riga di comando alla cartella del plug-in ed eseguire:<\/p>\n<p><code>npm init<\/code>e segui la serie di prompt qui<\/p>\n<p>Modifica il file <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> che \u00e8 stato creato e aggiungi una nuova voce per eseguire i nostri test nella <code>scripts<\/code>sezione:<\/p>\n<p><code>\"test\": \"jest\"<\/code><\/p>\n<p>Questo sar\u00e0 il comando che useremo per dire a Jest di eseguire i nostri unit test JavaScript. Questa \u00e8 una corsa una tantum, ma Jest supporta anche il monitoraggio dei file, quindi puoi inserirne uno aggiuntivo:<\/p>\n<p><code>\"test-watch\": \"jest --watch\"<\/code><\/p>\n<p>Ora installa Jest come dipendenza di sviluppo eseguendo<\/p>\n<p><code>npm install -D jest<\/code><\/p>\n<p>Durante l&#8217;installazione, crea un file denominato <code>jest.config.js<\/code>. Questo manterr\u00e0 tutta la configurazione necessaria. Aggiungi quanto segue:<\/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>Esaminiamo ciascuno di essi:<\/p>\n<ul>\n<li><code>verbose<\/code>: indica se ogni singolo test deve essere riportato durante la corsa. Tutti gli errori verranno visualizzati anche in basso dopo l&#8217;esecuzione. Si noti che se viene eseguito un solo file di test, il valore predefinito \u00e8 <code>true<\/code>.<\/li>\n<li><code>setupFiles<\/code>: un elenco di percorsi di moduli che eseguono del codice per configurare o impostare l&#8217;ambiente di test. Ogni setupFile verr\u00e0 eseguito una volta per file di test. Poich\u00e9 ogni test viene eseguito nel proprio ambiente, questi script verranno eseguiti nell&#8217;ambiente di test immediatamente prima dell&#8217;esecuzione del codice di test stesso. Lo useremo per dichiarare le variabili globali rese da PHP e WordPress con comandi come <code>wp_add_inline_script<\/code>o <code>wp_localize_script<\/code>.<\/li>\n<li><code>moduleNameMapper<\/code>: questa \u00e8 una mappa da espressioni regolari a nomi di moduli (o array di nomi di moduli) che consentono di stubout risorse statiche, come immagini o stili con un singolo modulo.<\/li>\n<\/ul>\n<p>Hai sicuramente notato il riferimento: questo \u00e8 un token speciale che viene sostituito da Jest con la radice del tuo progetto, che di solito \u00e8 la posizione del tuo <code>package.json<\/code>.<\/p>\n<p>Approfondiremo nelle prossime due sezioni, ma prima creiamo la cartella e questi due file a cui si fa riferimento sopra:<\/p>\n<ul>\n<li>creare una cartella denominata<code>__mocks__<\/code><\/li>\n<li>all&#8217;interno della cartella, creare i file <code>styleMock.js<\/code>e<code>globals.js<\/code><\/li>\n<\/ul>\n<h2>Importazione di stili fittizi per i test Jest<\/h2>\n<p>Se, come questo plugin, usi Webpack per compilare tutto, inclusi gli stili e stai importando il <code>.scss<\/code>file nel <code>.js<\/code>file:<\/p>\n<pre><code>import '.\/main.scss';<\/code><\/pre>\n<p>\u00e8 necessario utilizzare <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> per deridere i file SASS durante l&#8217;importazione nel nostro file JavaScript, altrimenti Jest si arrester\u00e0 in modo anomalo poich\u00e9 non sar\u00e0 in grado di risolvere il modulo. Non hai bisogno di molto per questo file, basta aggiungere<\/p>\n<p>Jest utilizzer\u00e0 questo mock ogni volta che trova <code>.scss<\/code>un&#8217;importazione e li mapper\u00e0 al mock, permettendoti di andare avanti con i test senza preoccuparti degli stili.<\/p>\n<h2>Imposta globali per Jest<\/h2>\n<p>Lavoriamo ora nel file <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>. Uno dei vantaggi dell&#8217;utilizzo di Jest \u00e8 che viene gi\u00e0 fornito con un <code>jsdom<\/code>, un&#8217;implementazione JavaScript puro degli standard Web gi\u00e0 configurata, che simula un ambiente DOM come se fossi nel browser e lo useremo per deridere gli elementi DOM per i nostri test<\/p>\n<p>Crea una cartella <code>__mocks__<\/code>e un <code>globals.js<\/code>file al suo interno. Aggiungi questo al file:<\/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>Questo dichiarer\u00e0 e derider\u00e0 alcuni oggetti e metodi che utilizzerai in seguito nei tuoi test. L&#8217;ultimo \u00e8 di particolare interesse<\/p>\n<pre><code>global.window.wpJestTests = undefined;<\/code><\/pre>\n<p>Questa \u00e8 la variabile globale che abbiamo scritto usando <code>wp_add_inline_script<\/code>. Devi prenderlo in giro come una variabile globale per poterlo utilizzare nei tuoi test.<\/p>\n<h2>Panoramica del file JavaScript<\/h2>\n<p>Il plugin di WordPress ha un unico file 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> in una <code>\/src<\/code>cartella. Questo viene successivamente traspilato e prodotto in un <code>\/js\/front.js<\/code>file che \u00e8 ci\u00f2 che il PHP caricher\u00e0. Il JavaScript carica cinque post di WordPress utilizzando <code>fetch<\/code>, una funzione JavaScript standard, tramite l&#8217;API REST di WP e inserisce il suo titolo, con un collegamento al post, in un file <code>div.entry-content<\/code>.<\/p>\n<p>Stai per esportare la funzione che fa tutto il lavoro:<\/p>\n<pre><code>export const wpJestTestsInit =() =&gt; {<\/code><\/pre>\n<p>quindi puoi usarlo nei tuoi test in Jest.<\/p>\n<h2>Scrivere test unitari JavaScript con Jest, finalmente!<\/h2>\n<p>Ora puoi iniziare a scrivere i test! Jest pu\u00f2 trovare i test in molti modi:<\/p>\n<ul>\n<li>se il nome del file \u00e8<code>test.js<\/code><\/li>\n<li>o \u00e8 preceduto dal nome del file che verifica, come<code>main.test.js<\/code><\/li>\n<li>se sono <code>.js<\/code>file che si trovano in una cartella denominata<code>__tests__<\/code><\/li>\n<\/ul>\n<p>Crea la <code>__tests__<\/code>cartella e al suo interno, un file <code>front.test.js<\/code>. Puoi vedere <a href=\"https:\/\/github.com\/eliorivero\/wp-jest-tests\/blob\/master\/__tests__\/front.test.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il file JavaScript finito per i test Jest<\/a> nel repository complementare. Esaminiamolo a blocchi. La prima riga importa il file JS che vogliamo testare:<\/p>\n<pre><code>import { wpJestTestsInit } from '..\/src\/main';<\/code><\/pre>\n<p>Successivamente, cancelliamo tutti i mock, quindi non corriamo mai con mock sporchi che trasportano i valori dei test precedenti. Ci\u00f2 pu\u00f2 portare a errori poich\u00e9, ad esempio, se stiamo spiando quante volte \u00e8 stata chiamata una funzione presa in giro, potremmo ottenere una lettura errata se non cancelliamo la simulazione tra test e test:<\/p>\n<pre><code>afterEach(() =&gt; {\n    jest.clearAllMocks();\n} );<\/code><\/pre>\n<p>Il primo test che scriveremo, fa affermazioni di base quando alcune cose falliscono. Ad esempio, se la variabile globale <code>wpJestTests<\/code>con cui stavamo scrivendo <code>wp_add_inline_script<\/code>non \u00e8 stata scritta per nessun motivo:<\/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>In questo codice,<\/p>\n<ul>\n<li><code>describe<\/code>crea un gruppo composto da diversi test correlati<\/li>\n<li><code>test<\/code>\u00e8 ci\u00f2 che esegue effettivamente un test<\/li>\n<li><code>expect<\/code>avvolge il nostro soggetto di test fornendo accesso a una serie di &quot;corrispondenti&quot; che ti consentono di fare affermazioni diverse sul suo contenuto<\/li>\n<li><code>toBe<\/code>\u00e8 uno di questi abbinamenti. Jest ha molti <a href=\"https:\/\/jestjs.io\/docs\/en\/expect\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">abbinatori inclusi<\/a> e ce ne sono anche altri che puoi aggiungere con <a href=\"https:\/\/github.com\/jest-community\/jest-extended#jest-extended\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">un pacchetto di terze parti<\/a>.<\/li>\n<\/ul>\n<p>Il primo test non sta definendo nulla <code>wpJestTests<\/code>, quindi il suo valore sar\u00e0 quello che hai definito in <code>globals.js<\/code>. Poich\u00e9 \u00e8 <code>undefined<\/code>, non possiamo lavorare, quindi vogliamo confermare che la funzione ritorna senza fare nulla.<\/p>\n<p>Il secondo test definisce <code>wpJestTests<\/code>e prende in giro il <code>document.querySelector<\/code>metodo da restituire <code>undefined<\/code>che \u00e8 ci\u00f2 che restituirebbe se non riuscisse a trovare un elemento nel DOM. In tal caso, vogliamo confermare che stiamo tornando senza fare nulla e che la nostra funzione mocking <code>document.querySelector<\/code>\u00e8 stata chiamata una volta.<\/p>\n<h2>Recupero fittizio nei test di Jest<\/h2>\n<p>La prossima serie di test inizia con<\/p>\n<pre><code>describe( 'Fetch posts', () =&gt; {<\/code><\/pre>\n<p>e all&#8217;interno di questo, abbiamo un&#8217;altra funzione di smontaggio:<\/p>\n<pre><code>afterAll( () =&gt; {\n    global.fetch.mockClear();\n    delete global.fetch;\n});<\/code><\/pre>\n<p>a differenza <code>afterEach<\/code>di questo, verr\u00e0 eseguito dopo che tutti i test all&#8217;interno di questo <code>describe<\/code>blocco sono stati eseguiti. Poich\u00e9 il nostro file JavaScript utilizza <code>fetch<\/code>per caricare i post, dobbiamo verificare che sia stato chiamato e abbia restituito ci\u00f2 che abbiamo richiesto, quindi prenderemo in giro la <code>fetch<\/code>funzione:<\/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>Prendiamo in giro la prima Promise che risolve la risposta e la seconda una rappresentazione JSON dei dati. Questi dati sono simili a quelli che otteniamo dall&#8217;API REST di WP. Dato che il nostro codice ha bisogno solo del titolo e del collegamento, lo stiamo prendendo in giro.<\/p>\n<h2>Test di integrazione JavaScript con Jest in codice asincrono che utilizza fetch<\/h2>\n<p>Ora possiamo scrivere il test usando il mocked <code>fetch<\/code>. C&#8217;\u00e8 una grande differenza con questo test rispetto agli altri unit test JavaScript: questo \u00e8 un test di integrazione. I test precedenti esaminati qui hanno semplicemente assicurato che un componente funzionasse bene. Abbiamo verificato che se la variabile globale dello stato iniziale non fosse stata definita, il nostro componente non sarebbe stato visualizzato. Questo \u00e8 diverso perch\u00e9 testeremo come funziona l&#8217;intero sistema quando viene definita la variabile di stato iniziale, avviando cos\u00ec una transazione di dati e infine inserendo i titoli dei post con i relativi collegamenti nel documento.<\/p>\n<p>Fin dall&#8217;inizio \u00e8 diverso: la funzione anonima passata a <code>test<\/code>riceve un <code>done<\/code>parametro. Questa \u00e8 in realt\u00e0 una funzione che verr\u00e0 chiamata al termine del test. Jest aspetter\u00e0 fino a quando non <code>done<\/code>verr\u00e0 chiamato prima di terminare il test. Se <code>done<\/code>non viene mai chiamato, il test fallir\u00e0 con un errore di timeout. Questo \u00e8 interessante per noi poich\u00e9 stiamo testando il codice che coinvolge <code>fetch<\/code>, che \u00e8 una funzione asincrona.<\/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>Il globale <code>wpJestTests<\/code>\u00e8 definito e il nostro mocked <code>document.querySelector<\/code>ora restituisce ci\u00f2 che assomiglia a un elemento HTML, con anche <code>classList<\/code>e il suo <code>add<\/code>metodo figlio.<\/p>\n<p>Chiamiamo <code>wpJestTestsInit<\/code>e ci aspettiamo che finisca correttamente. Ora, poich\u00e9 <code>fetch<\/code>\u00e8 asincrono, <a href=\"https:\/\/nodejs.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">utilizzeremo<\/a><code>process.nextTick<\/code> Node.js. In Node.js \u00e8 la coda che verr\u00e0 eseguita al termine di tutti gli eventi nel ciclo di eventi corrente. Questo \u00e8 fantastico perch\u00e9 tutte le nostre promesse verrebbero risolte, che \u00e8 esattamente ci\u00f2 di cui abbiamo bisogno per testare questo codice che coinvolge .<a href=\"https:\/\/nodejs.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><code>nextTick``fetch<\/code><\/p>\n<p>Il resto sono altre affermazioni per garantire che sia stato <code>querySelector<\/code>trovato qualcosa con cui lavorare, che <code>fetch<\/code>sia stato effettivamente chiamato, che una classe sia stata aggiunta all&#8217;elenco e che i titoli e i collegamenti dei nostri post siano stati inseriti nell&#8217;elemento HTML corrispondente. Una volta fatto tutto, chiamiamo <code>done<\/code>e il nostro test asincrono termina.<\/p>\n<h2>Esegui i tuoi test Jest<\/h2>\n<p>Ora puoi digitare<\/p>\n<p><code>npm run test<\/code><\/p>\n<p>e Jest eseguir\u00e0 gli unit test JavaScript per il tuo plugin 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=\"Semplici unit test JavaScript in WordPress con Jest\" ><\/a><\/p>\n<h2>Conclusione<\/h2>\n<p>Quindi Jest \u00e8 un&#8217;ottima e semplice soluzione per scrivere test che coprono il codice JavaScript dei nostri plugin o temi WordPress. Ma c&#8217;\u00e8 di pi\u00f9. Se stiamo scrivendo un&#8217;app React per il nostro plugin, potremmo voler fare delle affermazioni al riguardo. Anche Jest pu\u00f2 aiutare fino a un certo punto e, se ne abbiamo bisogno di pi\u00f9, possiamo aggiungere Enzima ai nostri strumenti e iniziare a scrivere test di integrazione con esso.<\/p>\n<p>Per favore dona!<\/p>\n<p>Se l&#8217;hai trovato utile, sentiti libero di offrirmi un caff\u00e8 <img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"Semplici unit test JavaScript in WordPress con Jest\" \/>cos\u00ec posso stare sveglio e creare tutorial pi\u00f9 utili per te!<\/p>\n<p>$ 3,00<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Garantisci la stabilit\u00e0 del codice JavaScript nel tuo plug-in WordPress scrivendo unit test JavaScript utilizzando 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":[896,731,751,1019,720,844,865],"tags":[1168],"class_list":["post-232385","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-javascript-6","category-open-source-projektmanagement-3","category-siti-utili","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=232385"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232385\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/157898"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=232385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=232385"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=232385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}