2015-04-09 10 views
9

Sto provando a testare l'unità il mio codice server (non-http, protocollo personalizzato). Devo creare una presa duplex fittizia che possa inviare messaggi in modo asincrono e ricevere messaggi da.NodeJS: Come posso creare un socket tcp falso per testare i server

Ho avuto qualche successo marginale nella creazione di un flusso fronte-retro da readArray di eventi e da writeArray, ma readArray richiede di avere i dati in primo piano e writeArray non si attiva finché il flusso non termina. Ho bisogno di testare nel tempo. Una soluzione ideale sarebbe costituita da due prese duplex collegate tra loro.

Esistono soluzioni esistenti per questo? Preferirei non dover ricorrere all'inizializzazione di un server reale per testarlo.

+0

[nodo-mitm] (https://github.com/moll/node-mitm) può essere d'aiuto. –

+0

node-mitm serve per catturare le richieste in uscita. Sto cercando di simulare una richiesta in arrivo. – ChiperSoft

risposta

1

Node Mitm può effettivamente farlo bene. Può intercettare e prendere in giro non solo HTTP ma qualsiasi connessione TCP.

mitm.on("connection", function(socket) { socket.write("Hello back!") }) 

var socket = Net.connect(22, "example.org") 
socket.write("Hello!") 
socket.setEncoding("utf8") 
socket.read() // => "Hello back!" 
+0

Non sto cercando di intercettare una connessione in arrivo, non sto cercando di intercettare nulla. Voglio creare una connessione mock tcp per passare al mio gestore di connessione (la funzione che fornisci a net.createServer) e ad altre funzioni, che posso quindi comunicare in modo testabile senza dover ricollocare un server vero e proprio. – ChiperSoft

+0

Quindi potresti voler dare un'occhiata a questo: [https://gist.github.com/FGRibreau/7284395](https://gist.github.com/FGRibreau/7284395) –

+0

Sì, ho trovato che nel mio ricerca. Non è pipe-capace, il che lo rende inutilizzabile con il mio test case. Ho bisogno di un flusso di lavoro, non solo di un'emulazione di uno, e non ne so abbastanza degli API dei flussi per farlo fare ciò di cui ho bisogno. Quello che voglio veramente è solo due stream duplex collegati tra loro, ma non riesco a capire come farlo funzionare. – ChiperSoft