1

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

档案一:

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

欣赏任何指针/代码。

谢谢。

4

2 回答 2

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();
      });
    });
于 2017-03-05T06:54:02.237 回答
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);
于 2017-03-04T23:41:16.067 回答