编写async.parallel测试。

时间:2017-03-04 23:29:13

标签: javascript node.js jasmine async.js proxyquire

我是javascript的新手。我正在尝试使用proxyquire编写基本的单元测试。以下代码。

文件A:

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    
});

};

文件A的单元测试如下所示:

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中测试那些有“//做某事”的代码。

感谢任何指针/代码。

感谢。

2 个答案:

答案 0 :(得分:1)

好的,我太傻了.fileA的单元测试如下所示。

    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();
      });
    });

答案 1 :(得分:0)

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

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

然后在你的文件A:

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