我是nodejs和jasmine的新手。在一个小项目上学习javascript / node和jasmine。我试图窥探节点中的对象child_process,并看到使用指定的参数调用方法'spawn'。
jasmine错误报告在调用调用spawn方法的对象(在本例中为Nndb)时,从不调用spawn。但实际的工作是由子进程执行的,因为我看到控制台中打印的结果。
这是我在运行jasmine-node脚本时看到的失败:
故障:
1)刮取xyz spawns子进程 信息: 预期的spy spawn已经被['../src/scrape_nndb.js',0]调用,但它从未被调用过。 堆栈跟踪: 错误:使用['../src/scrape_nndb.js',0]调用预期的spy spawn但是>它从未被调用过。 在null。 (/Users/arun.bakt/skunkWorks/scraping/spec/nndb_spec.js:30:41) 在Timer.listOnTimeout [as 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;
答案 0 :(得分:0)
哦,我看到了问题。您创建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( //...
}