In Chai, si può fare cose come la seguente:Come funzionano le librerie di asserzioni come Chai senza forzare una chiamata a una funzione?
expect({}).to.exist;
exist
non è una chiamata di funzione, ma questo funziona ancora nel framework di test. Il contrario (expect({}).to.not.exist
) causa il fallimento dei test, ma ancora una volta, exist
non è una chiamata di funzione.
Come funzionano queste asserzioni senza farmi chiamare una funzione? Infatti, se provo a dire expect({}).to.exist()
il test fallisce perché exist
non è una funzione.
Come lo spiega? Questo è un grande salto senza spiegare cosa succede nel mezzo – vsync
L'articolo collegato aiuta davvero a spiegare le cose se non hai familiarità con i getter. La versione breve è che, grazie ai nuovi miglioramenti del browser (-ish), ora puoi controllare una proprietà oltre la semplice impostazione (ad esempio 'a.b = 5'). Ora è possibile definire un metodo "getter" per una proprietà e quando un codice tenta di leggere il valore di tale proprietà (ad esempio 'console.log (a.b)') il browser eseguirà il metodo definito "getter". Questo metodo può quindi attivare la logica (ad esempio la logica di asserzione di Chai). Quindi, quando si esegue un 'to.exist', anche se non c'è nessun'() 'dopo * si * sta ancora chiamando un metodo (il metodo getter). – machineghost