2016-06-21 19 views
2

私はchild_processを使って子プロセスを実行するノードサービスを持っています。私のケースでは、子プロセスはSTDINとSTDOUTを受け取るC++バイナリです。サービスは期待どおりに動作していますが、現在はmocha/chaiを使用してサービスのメソッドの単体テストを作成し、イスタンブール経由でテストを実行しようとしています。私はこれらの教科書の基盤を説明しましたが、child_processを使うノードサービスの単体テストを書く方法の例を得たいだけです。その例に基づいて、私は自分のサービスの単体テストを作成してInstanbulで実行し、カバレッジレポートを生成することができます。child_processを使用するノードサービスの単体テストを書く

サービスは、このような子を生成します、

var spawn    = require('child_process').spawn, 
    child    = spawn(pathToBinary); 
child.stdin.write('JSON'); 
child.stdout.on('data', function (data) { 
    //perform operations here 
}); 
+0

データイベントのコールバックを襲う可能性のあるすべてのケースについて、テストを書く方が優れています。したがって、あなたがテストしたいコールバックではなく、最終的にその中に書き込むもの... – deostroll

+0

@deostrollでは、このタイプのSTDIN/STDOUTシナリオのサンプル単体テストのリンクを提供できますか? – Sai

答えて

1

これは非常に簡単な例ですが、いくつかの助けになるかもしれません。

'use strict'; 

var spawn = require('child_process').spawn; 
var expect = require('chai').expect; 

describe('test', function() { 
    it('should return testing', function(done) { 
    var cat = spawn('/bin/cat'); 

    cat.stdout.on('data', function (data) { 
     expect(data.toString()).to.equal('testing'); 
     done(); 
    }); 

    cat.stdin.write('testing'); 
    }); 
}); 
+1

ありがとうございます。この例では、私のシナリオでは、stdinは必要なキーを持つJSONを取ります:バイナリのvalペアとstdoutは基本的にデータストリームであるJSONです。 – Sai

関連する問題