[英]spying on node child_process using jasmine
我是nodejs和jasmine的新手。 正在研究一個用於學習javascript / node和jasmine的小項目。 我正在嘗試監視節點中的對象child_process,並看到使用指定的參數調用了“ spawn”方法。
茉莉花錯誤報告,當調用調用spawn方法的對象(在本例中為Nndb)時,從未調用過spawn。 但是實際工作是由子進程執行的,因為我看到控制台中打印了結果。
這是我運行茉莉節點腳本時看到的失敗:
失敗:
1)刮xyz生成子進程消息:預期的間諜生成已使用['../src/scrape_nndb.js',0]調用,但從未調用過。 Stacktrace:錯誤:預期的間諜生成已使用['../src/scrape_nndb.js',0]調用,但從未調用過。 為空。 (/Users/arun.bakt/skunkWorks/scraping/spec/nndb_spec.js:30:41)在Timer.listOnTimeout [作為ontimeout](timers.js:110:15)
在6.024秒內完成1次測試,1次聲明,1次失敗,0次跳過”
茉莉花測試文件:
require('../src/nndb.js');
describe("scrape for XYZ", function() {
var child = require('child_process');
it("spawns child process", function() {
var nndb = new Nndb();
var child_process = nndb.child_process;
spyOn(child_process, "spawn");
runs(function(){
flag= false;
nndb.scrapeForXYZ('../src/scrape_nndb.js', 0);
setTimeout(function() {
flag = true;
},6000)
});
waitsFor(function(){
return flag;
}, "Scraping done", 6000);
runs(function(){
expect(child_process.spawn).toHaveBeenCalledWith('../src/scrape_nndb.js',0);
});
});
});
下面正在測試的文件nndb.js:
var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');
var child_process = require('child_process');
Nndb = function() {
this.child_process = child_process;
this.spawn = this.child_process.spawn;
};
Nndb.prototype.scrapeForXYZ = function( phantomScriptToRun, offSet) {
var child = this.spawn('phantomjs', [phantomScriptToRun, offSet]);
child.stdout.on('data',function(data){
console.log("MATCH "+decoder.write(data));
});
child.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
child.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
return 0;
};
exports.Nndb = Nndb;
哦,我明白了。 創建nndb
,然后nndb
將nndb.spawn
設置為nndb.child_process.spawn
。 然后,您在nndb.child_process.spawn
上設置了一個間諜,但是由於已經從nndb.spawn
中復制了一個間諜,因此該間諜不會同時應用於兩者。 當nndb.scrapeForXYZ
調用nndb.spawn
,間諜不受影響。
嘗試這個:
it("spawns child process", function() {
var nndb = new Nndb();
var child_process = nndb.child_process;
spyOn(nndb, "spawn");
//...
expect(nndb.spawn).toHaveBeenCalledWith( //...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.