2016-06-21 36 views
2

我有一個節點服務,我使用child_process spwan一個孩子,在我的情況下,孩子是一個C++二進制文件,它需要STDIN和流STDOUT。該服務正在按預期工作,現在我正在嘗試使用mocha/chai在服務中編寫單元測試,並通過伊斯坦布爾運行測試。我已經爲這些stuufs奠定了基礎,但只想獲得有關如何爲使用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對二進制和標準輸出是一個JSON,這是一個基本上的數據流.. – Sai