Node.JS testing con Jasmine, database e codice preesistente

5

Ho recentemente costruito l'inizio di un sistema principale che probabilmente diventerà un prodotto mostruoso. Sto costruendo il sistema con node.js e ho deciso dopo aver creato una piccola base, che sarebbe stata una buona idea iniziare a utilizzare una sorta di suite di test automatizzata per testare l'applicazione.

Ho deciso di usare il gelsomino, in quanto sembra abbastanza solido e ha molte funzioni per lo stubing di metodi e classi di spionaggio e derisione. L'applicazione ha un sacco di archivi dati esterni e accesso api (kestrel, mysql, mongodb, facebook e altro).

Il mio problema è che ho una buona quantità di codice scritto che voglio iniziare a testare - poiché rappresenta le basi dell'applicazione. Quali sono le migliori pratiche per testare metodi / classi che accedono a API esterne su cui posso o non posso avere controllo?

Ad esempio, ho una struttura dati che recupera una serie di dati da un database MySQL. Voglio testare il metodo che recupera i dati; e non sono sicuro di come farlo. Potrei testare il metodo fetch che dovrebbe restituire una matrice di oggetti, ma per isolare il metodo dal database, ho bisogno di definire i miei dati di fissaggio. Quindi quello che finisco per fare è lo stub dell'esecuzione di mysql e la restituzione di un dataset statico. Quindi, finisco per scrivere una funzione che restituisce il set di dati che fa passare il test. Questo non sembra testare realmente il codice, a parte la verifica che un metodo venga chiamato.

So che è un po 'astratto e vago, sembra che l'idea del testing sia molto astratta, quindi spero che qualcuno abbia una certa esperienza e possa guidarmi nella giusta direzione.

Qualsiasi consiglio o lettura che posso fare è più che benvenuto.

Grazie in anticipo.

    
posta Jim Rubenstein 03.02.2012 - 02:07
fonte

1 risposta

1

Non sono sicuramente un esperto nei test, ma penso che tu sia sulla strada giusta, quello che ti serve sono più test: dovresti fare un test per ogni tipo di cosa che il database può restituire (eventualmente; non ho bisogno di inventarli tutti subito). Mettere a punto un diverso tipo di valore di ritorno che ci si potrebbe aspettare dal database (restituito una riga del risultato, restituito più volte, nessun risultato, ad esempio) per ciascun test e assicurarsi che il metodo restituisca i valori corretti.

In questo modo la prima implementazione può solo restituire i risultati che ci si aspetta dal test, ma man mano che si aggiungono altri test si continua a rivedere l'implementazione fino a quando non è completa come necessario.

    
risposta data 03.02.2012 - 04:15
fonte

Leggi altre domande sui tag