2010-12-10 31 views
7

Sto scrivendo un'applicazione server-side con node.js e vorrei includere i test unitari. Una cosa con cui sto combattendo è un buon modo per testare l'unità EventEmitter e setInterval/setTimoutUnit test event javascript

Quali opzioni devo eseguire per testare il lato server asincrono sul lato javascript?

Sono consapevole che posso semplicemente collegare un altro listener all'EventEmitter che è la funzione di test, ma come posso garantire che la funzione di test venga mai eseguita? parte del test dell'unità è garantire che ogni parte del test dell'unità funzioni.

Potrei usare setTimeout da solo ma sembra una soluzione furba.

Se qui è utile un codice di esempio che sto tentando di testare.

... 
function init(param) { 
    ... 
    // run update entities periodically 
    setInterval(this._updateEntities.bind(this, param.containerFull), 
     1000/param.fps); 
    ... 
} 
... 
EntityUpdater.prototype = { 
    ... 
    "_updateEntities": function updateEntitiesfunc(fn) { 
     this._tickEmitter.emit(
      "tick", 
      new dataContainer.DataContainer(this.getEntityCount()) 
      .on(
       "full", fn.bind(this) 
      ) 
     ); 
    }, 
    ... 
} 
... 

(Emit attiverà un evento)

[Edit]

ho iniziato a leggere alcuni dei test EvevntEmitter a https://github.com/ry/node/tree/master/test/simple e mi aiuta a vedere come fare per questo.

+0

Hai dato un'occhiata a questo post del blog? http://debuggable.com/posts/unit-testing-with-node-js:4b647d40-34e4-435a-a880-3b04cbdd56cb – Tmdean

+0

Sì, ho letto il blog, è utile ma copre solo alcuni punti. Ho appena notato che il test non terminerà correttamente fino al termine del ciclo. Questo lascia ancora una volta facile setTimeout ed eventi una tantum. – Raynos

+0

Ho solo notato che il blocco di uscita è rispetto al test piuttosto che al server. È un modo per eseguire un blocco di codice al termine di tutte le azioni asincrone – Raynos

risposta

3

Personalmente quello che mi ha aiutato di più è stato la lettura dei test per node.js stessi (ne ho letto solo circa la metà).

Questo mi ha dato la sensazione di provare il codice asincrono.

Grazie a @tmdean per indicare un altro esempio di come testare il codice asincrono.

3

Si consiglia di controllare Jasmine per i test. È progettato per eseguire test al di fuori dell'ambiente del browser e blocca chiamate come setTimeout, fornendo un orologio falso con cui è possibile spostare il tempo in avanti a proprio piacimento per testare qualsiasi cosa legata al tempo.