0

私は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;
4

1 に答える 1