簡體   English   中英

使用茉莉監視節點child_process

[英]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 ,然后nndbnndb.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM