私はnodejsとjasmineが初めてです。javascript/node と jasmine を学習するための小さなプロジェクトに取り組んでいます。ノード内のオブジェクト child_process をスパイしようとしていますが、メソッド 'spawn' が指定された引数で呼び出されることを確認しています。
jasmine エラーは、spawn メソッドを呼び出すオブジェクト (この場合は Nndb) が呼び出されたときに spawn が呼び出されないことを報告します。しかし、結果がコンソールに出力されるのを見ると、実際の作業は子プロセスによって実行されます。
jasmine-node スクリプトを実行したときに表示されるエラーは次のとおりです。
失敗:
1) xyz spawn の子プロセスのスクレイプ メッセージ: [ '../src/scrape_nndb.js', 0 ] で呼び出されると予想される spy spawn ですが、呼び出されませんでした。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;