2010-12-10 23 views
7

私はnode.jsを使用してサーバーサイドアプリケーションを作成しており、単体テストを含めたいと考えています。私が苦労しているのは、単体テストの良い方法です。EventEmittersetInterval/setTimoutユニットテストのイベント駆動型javascript

ユニットテストの非同期サーバーサイドJavaScriptにはどのようなオプションがありますか?

私は、テスト機能であるEventEmitterに別のリスナーを追加することはできますが、テスト機能が実行されていることをどのように確認するのですか?ユニットテストの一部は、ユニットテストの各部を確実に実行することです。

私はsetTimeoutを自分で使うことができましたが、それはハックな解決策のようです。

ここで私がテストしようとしているいくつかのexplerコードが役に立ちます。

... 
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イベントをトリガします)

[編集]

私はhttps://github.com/ry/node/tree/master/test/simpleでEvevntEmitterテストのいくつかを読み始め、それは私がこれについて移動する方法を確認できます。

+0

あなたはこのブログ記事を見ましたか? http://debuggable.com/posts/unit-testing-with-node-js:4b647d40-34e4-435a-a880-3b04cbdd56cb – Tmdean

+0

はい、私はブログを読んで、それは有用ですが、いくつかの点をカバーしています。私はちょうどループが終了するまでactaully終了しないでくださいテストに気づいた。これは、1回のsetTimeoutと1回の時間イベントのために簡単に残します。 – Raynos

+0

私は今、出口ブロックがサーバーではなくテストに関して注目されています。すべての非同期アクションが終了した後でコードブロックを実行する方法 – Raynos

答えて

3

私は個人的にnode.jsのテストを読んでいました(半分しか読んでいません)。

これは、私に非同期コードのテスト方法の良い感じを与えました。

非同期コードのテスト方法のもう1つの例を指摘してくれた@tmdeanに感謝します。

3

あなたのテストではJasmineをチェックアウトすることをお勧めします。これは、ブラウザ環境の外でテストを実行するために構築されており、setTimeoutのような呼び出しをスタブし、暇な時間に何か時間をテストするための時間を前進させることができる偽時計を提供します。

関連する問題