JavaScript ... cosa testare [duplicato]

1

Mi piacerebbe sentire l'opinione di altre persone su cosa testare in JavaScript. Ci ho pensato e sperimentato e mi permetto di presentare ciò che mi sembra la cosa giusta. Prima di tutto, per poter testare il tuo codice di produzione è necessario dividere il codice del prodotto in tre livelli: (1) DOM / jQuery, (2) Logica e (3) AJAX. Fare riferimento all'immagine allegata.

IllivelloLogicasitrovatraillivelloDOM/jQueryeillivelloAJAX,ovveroillivelloDOM/jQuerynonèlegatoallivelloAJAX.Quindi,amioparere,l'unicostratochedovrebbeesseretestatounitariamenteèlalogica.Itestdelleunitàdiscritturadovrebberoesseresemplici,altrimentiiprogrammatorinonliscriveranno.Qualèl'usodeitestdiunitàdiscritturaperillivelloDOM/jQuery-ok,haiaggiuntounelementoliaunelementoul,perchédevoaffermarechenoncidovrebberoessereistruzioniif.ApropositodellivelloAJAX,cosac'èdadire...l'URLutilizzatoera"blah", so che era "blah". Qualunque sia il dato che è stato ottenuto nello strato AJAX dovrebbe essere dato al livello Logico. Ora, il livello Logica è una storia diversa, ad esempio, in un test unitario è possibile fornire dati che provengono da una chiamata AJAX e utilizzare un finto strato DOM / jQuery per verificare che i dati siano stati visualizzati correttamente. Fammi sapere cosa ne pensi.

    
posta SBel 23.02.2013 - 14:48
fonte

2 risposte

3

Perché non Ajax?

Questo mi sembra un ottimo posto per il test unitario. Come punto di entrata / uscita dentro e fuori da un determinato dominio, quello è un punto di strozzatura in cui è bello sapere che il tuo codice gestirà i cattivi dati nel miglior modo possibile. Idealmente, un problema di rete o di dati non genererà i tipi di eccezioni che infrangeranno il codice sulla tua pagina e forniranno il feedback degli utenti come appropriato. Ma vorrei sottolineare la convalida della registrazione live qui come prima strategia.

Semi-concordato nell'interfaccia DOM

Tutto ciò che puoi verificare è se qualcosa funziona quando tutto il codice HTML è corretto. Non puoi davvero fare supposizioni su cosa dovrebbe fare il tuo codice quando l'HTML è rotto perché convalidare per ogni piccola operazione DOM è troppo costoso. Inoltre, la rottura è in genere così ovvia che è comunque uno sforzo inutile. È meglio semplicemente avere pagine di test piene di variazioni in produzione su widget completamente funzionali con l'attivazione automatica delle loro varie funzionalità. Se ciò vale come test unitario, suppongo di non essere d'accordo.

Accordo sull'unità Testing dei dati: giocoleria / formattazione dei dati / logica

Questo è sicuramente il livello interno in cui potrebbe essere più sensato concentrarsi su una sorta di strategia di test.

Ma ancora non venduto al 100% su numerosi test della Web Unit lato client

Ne sono fuori discussione soprattutto perché è oscenamente facile testare il codice prima di commetterlo e i problemi sono in genere molto visibili sul lato client. Se non ottieni indicazioni visive immediate, vedrai problemi nella console.

IMO, la cosa fondamentale è concentrarsi sulla verifica di come il tuo codice reagisce a cose cattive da vettori che non controlli come quello che arriva da Ajax o JSON abbandonato dal server al caricamento della pagina. Problemi di regressione della varietà di bug whack-a-mole in cui una "correzione" interrompe qualcosa altrove è qualcosa che qualsiasi sviluppatore web lato client dovrebbe essere restio a non consentire mai nel proprio codice in primo luogo mantenendo separazioni pulite di preoccupazioni e test manuali la schifezza di tutto il loro lavoro in ogni browser supportato prima di impegnarsi. Ciò richiede tempo e direi che il tempo è meglio speso, evitando il problema in primo luogo rispetto al test per vedere se non si è riusciti a evitarlo. La flessibilità di JS semplifica la riduzione della complessità che tenderei a sostenere per i test automatici solo a colli di bottiglia chiave e la gestione dei dati necessariamente complessa.

In un recente lavoro con un codebase molto disordinato che non è stato più toccato dalle mani degli sviluppatori client-side, l'IMO di time-saver di debug più critico, sta prima stabilendo un modo per escludere molto rapidamente se è effettivamente un client-side problema. Se si stanno convalidando tutti i dati da e verso il server e si registrano problemi (silenziosamente in produzione ovviamente) nel momento in cui si verificano, questo può essere questione di secondi anziché di ore. Ma non si tratta di test unitari, bensì di validazione, che direi più importante dei test unitari quando puoi eseguire e diagnosticare il tuo codice in un ambiente live il più facilmente possibile con il codice web sul lato client.

Considera una strategia mista

Quindi non sto dicendo che sia sempre una cattiva idea. Penso che con JavaScript sia bravo in quello che è molto bravo e con lo sviluppo sul web del lato client che è l'unico animale che è, è meglio dedicare del tempo ad evitare il tipo di complessità inutile che fa preoccupare i problemi di regressione in primo luogo e concentrarsi maggiormente sulla diagnosi rapida dei problemi nel proprio ambiente di lavoro. Le pagine di test dei widget sono fantastiche. La convalida dell'ingresso / uscita dei dati e forse il test dell'unità di gestione degli errori è ottimo. E quando si ha a che fare con un'elevata complessità per la gestione / formattazione dei dati, i test unitari potrebbero anche essere grandiosi. Ma la copertura al 100% dei test unitari di un determinato livello, direi, è il tempo / lo sforzo che potrebbe essere meglio focalizzato altrove per una tipica applicazione web lato client.

    
risposta data 23.02.2013 - 19:03
fonte
0

Ad un test minimo alle interfacce. Sul diagramma dovresti avere due frecce, una su jQuery | Logic e una su Logic | Ajax.

Lavorate verso l'interno mentre il design si solidifica. Non si vuole spendere un sacco di unità del tempo per testare qualche pezzo di logica interna che verrà solo strappato e sostituito da qualcos'altro in seguito.

Naturalmente, mentre granuli il tuo disegno, la finestra Logica apparirà come tante piccole scatole o strisce. Di nuovo test alle interfacce tra i componenti.

    
risposta data 24.02.2013 - 03:57
fonte

Leggi altre domande sui tag