2017-03-04 20 views
1

私はjavascriptの初心者です。私はproxyquireを使用して基本的な単体テストを書くことを試みています。以下のコードのために。async.parallelのテストを書く。

ファイル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でのコードの一部をテストする方法を見つけ出すことができません、です。

任意のポインタ/コードを理解してください。

ありがとうございました。

答えて

0

別の関数を渡してコールバックとして使用できます。あなたのファイルAで、その後

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

:FILEAため

// 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のテストを書こうとしています。ファイルAを変更した場合、私は実際のコードを変更しています。何か不足している可能性があります。 – user1948304

+0

私は実際にあなたがテストしようとしていることを理解していません - 理論的には、テストは.parallel関数が正しい出力をコールバックに返すことを検証する必要があります。コールバックを別々にテストしたい場合、それをパラレルロジックの一部にする必要はありません。入力を入力として擬似するだけです。 – Josh

+0

あなたはその入力を入力として擬似的に擬似することができます - これについてもっと詳しく説明できますか?問題はmodA、modBはdbコールです。模擬結果だけを検証してください。これは、//何かでロジックをテストすることです。私は非同期自体の実際の実行を望んでいません。 – user1948304

1

[OK]を、私はあまりにもされている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

関連する問題