2013-10-09 8 views
9

Vorrei testare le prese Web che sono state implementate usando sockjs.Come testare le prese per il web - JavaScript

var sock = new SockJS('http://mydomain.com/my_prefix'); 
    sock.onopen = function() { 
     console.log('open'); 
    }; 
    sock.onmessage = function(e) { 
     console.log('message', e.data); 
    }; 
    sock.onclose = function() { 
     console.log('close'); 
    }; 

ho stralunate e trovato questo article solo. Questo non è abbastanza buono perché sta facendo una vera connessione piuttosto che fingendo.

Ho anche provato SO ma ho trovato solo una domanda senza risposta here.

Qualcuno ha suggerito sinonjs ma non sono in grado di trovare alcun esempio decente.

Apprezzerò se qualcuno può far luce su questo argomento.

risposta

3

Quando si desidera testare unitamente una funzionalità che accede a una risorsa esterna, come nel caso di un server Websocket, l'approccio usuale consiste nell'utilizzare un oggetto fittizio per rappresentare la risorsa esterna. Un oggetto mock è un oggetto che guarda e si comporta come la risorsa esterna, ma in realtà non lo accede. Inoltre, può disporre della funzionalità di registrazione che consente di segnalare al codice di prova se il codice testato si comporta come previsto.

Nel tuo caso dovresti creare un oggetto mock-SockJS che abbia tutte le proprietà e i metodi rilevanti di un normale oggetto SockJS, ma la sua implementazione in realtà non contatta un server. Registra solo le chiamate al metodo e restituisce la risposta prevista inviata da un server esistente.

Quindi si dovrebbe rifattorizzare il codice che si desidera testare in modo che non crei il socket stesso ma invece ottenga un oggetto socket assegnato dall'esterno (questo è chiamato "dependency injection" ed è un linguaggio cruciale per scrivere unità- codice verificabile).

Nel codice reale, si assegna un oggetto SockJS reale. Ma nel tuo test unitario, assegni il tuo oggetto finto. Dopo aver chiamato i metodi di prova, è possibile esaminare l'oggetto fittizio per verificare se l'unità ha inviato i dati previsti al server.

+2

Grazie per il feedback, sembra un sacco di lavoro. Sto cercando qualcosa di pronto. Ad esempio, gelsomino ha tutti gli strumenti per creare chiamate AJAX false. Le prese sul web stanno diventando sempre più popolari. C'è qualche libreria che mi dà questi oggetti finti fuori dalla scatola? –

+2

@ user2855314 Jasmin implementa oggetti finti come decoratori attorno agli oggetti reali. La sua terminologia per questo è 'Spia'. Il metodo 'SpyOn' può essere concatenato con una chiamata a' andCallFake (function) 'che delega la chiamata al metodo alla propria implementazione. Ciò impedisce all'oggetto di provare effettivamente a contattare un server e restituisce invece ciò che restituisce l'implementazione. – Philipp

+1

@Philipp, puoi fornire un esempio per questo? –

Problemi correlati