2017-03-04 77 views
1

我是JavaScript的新手。我正在尝试使用proxyquire编写基本的单元测试。下面的代码。为async.parallel编写测试。

文件答:

const modA=require('./modA'); 
const modB=require('./modB'); 
const async=require('async'); 
module.exports=function(a,b,callback){ 

async.parallel([ 
    function(callback){ 
     // db call 
     modA(a,b,callback); 
    }, 
    function(callback){ 
     // db call 
     mobB(a,b,callback); 
    } 
], 
//not able to test code 
(err,res){ 
    //do something  
}); 

};

文件单元测试看起来如下:

const proxyquire=require('proxyquire'); 


function modaAStub(a, b, callback) { 
    return (null, modAresponse); 
} 

function modaBStub(a, b, callback) { 
    return (null, modaBresponse); 
} 

describe('test suite',() => { 
    it('test: should return results', (done) => { 
    const fileA = proxyquire('../../fileA', { 
     './modA': modaAStub, 
     './modB': modaBStub 
    }); 

    fileA(someinput1,someinput2); 
    done(); 
    }); 
}); 

的问题是,我无法弄清楚如何测试中的fileA的码具有“//做一些事情”。

欣赏任何指针/代码。

感谢。

回答

0

您可以传入另一个函数,并将其用作回调函数。

function callbackStub(err, result) { 
    return (null, modAresponse); 
} 

然后在文件中:

// import the callback stub above 
async.parallel([ 
function(callback){ 
    // db call 
     modA(a,b,callback); 
    }, 
    function(callback){ 
     // db call 
     mobB(a,b,callback); 
    } 
],callbackStub); 
+0

我很困惑。我正在为fileA编写测试。如果我更改我的文件我正在更改我的实际代码。我可能会丢失一些东西。 – user1948304

+0

我真的不明白你想要测试什么 - 理论上,测试应该验证.parallel函数将正确的输出返回给回调函数。如果您想要单独测试回调,则无需将其作为并行逻辑的一部分,只需将输入嘲笑为输入即可。 – Josh

+0

你可以嘲笑输入作为它的输入 - 你可以详细说明这个问题。我有的问题是modA,modB是数据库调用。所以我只是希望他们被剔除,输出是什么并验证模拟结果。这只是为了测试逻辑/ /做一些事情。我不希望异步本身的实际运行。 – user1948304

1

好吧,我已经过了的fileA stupid.The单元测试看起来像下面。

const proxyquire=require('proxyquire'); 
    const async=require('async'); 
    const expect=require('chai').expect; 

    const modAresponse={ 
     a:'1' 
    }; 
    const modBresponse={ 
     b:'1' 
    }; 
    const a={ 
     a:'1' 
    }; 
    const b={ 
     b:'1' 
    }; 
    const someresponse={ 
     a:'1', 
     b:'1' 
    }; 
    function modaAStub(a, b, callback) { 
     return callback(null, modAresponse); 
    } 

    function modaBStub(a, b, callback) { 
     return callback(null, modaBresponse); 
    } 

    describe('test suite',() => { 
     it('test: should return results', (done) => { 
     const fileA = proxyquire('../../fileA', { 
      './modA': modaAStub, 
      './modB': modaBStub, 
      async 
     }); 

     fileA(a,b,(err,response)=>{ 
        expect(JSON.stringify(response)).to.equal(JSON.stringify(someresponse)); 
     }); 
     done(); 
     }); 
    }); 
+0

看起来不错!很高兴你明白了 – Josh