2016-06-22 15 views
0

内のサービスコールを実行せずにノードの機能をテストするためにSinonを使用しました私は、外部サービスへのアウトコールを避けるが、私は、データを処理することができるようにバックセットシミュレーション結果を得ることができるようにサービス呼び出しを模擬するために、私のテストを書く方法を知っていません。私は再配線を使用しますか(もしそうなら、どうしたらうまくいくでしょうか)?どんな援助もありがとう!私は私のコード(私は以下のテストをしたいものの簡易版)のためにテストを書き、そして他のものをテストするためにsinonとチャイを使用しようとしているが、やるよ

qf = require('./service/queryFile'); 

function countByDate(req, res, next){ 
    //do stuff to create variable to pass to service call 
    var queryCriterion = { 
     d1 = req.query.d1, 
     d2 = req.query.d2 
    } 

    //make service call and process results 
    qf.getByDateAsync(queryCriterion) 
    .then(function(results){ 
     var data = {}; 
     //do some things with results data 
     data = results.data; 

     //return data object 
     res.json({ 
      success: true, 
      data: data, 
     }); 
    }); 
} 

module.exports = { 
    countByDate: countByDate 
}; 

****追加の詳細****

queryFile:

function getByDate(criterion){ 
    //query from database 
    //process results 
    return { 
     key1: aValue, 
     key2: bValue, 
     data: arrayOfObjects 
    }; 
} 

exports = module.exports = { 
    getByDate: getByDate, 
    getByDateAsync: Promise.promisify(getByDate) 
}; 

テスト:

var pf = require('./service/processFile'); 
var qf = require('./service/queryFile'); 
var req, res; 

before(function(){ 
    this.timeout(30000); 
}); 

beforeEach(function(){ 
    res.json = sinon.spy(); 
    res.status = sinon.stub().returns({json: sinon.spy()}); 
}); 

describe('test', function(){ 
    it('should return results from countByDate', function(done){ 
     var eDate = new Date(); 
     var sDate = eDate.getDate()-60; 

     req = res = {}; 

     req.query = { 
      d1: sDate, 
      d2: eDate 
     }; 

     var testData = [{ 
      key1: '', 
      key2: '', 
      data: [{aKey: new Date(), count: 100}] 
     }]; 

     sinon.stub(qf, 'getByDateAsync').returns(Promise.resolve({data:tData})); 

     pf.countByDate(req,res); 

     console.log(res.json.data); 
} 

答えて

0

私は私のテストでqueryFileを必要としました、 mockedレスポンスで約束を返すことによってgetByDateAsyncをスタブします。

const qf = require('./service/queryFile'); 

sinon.stub(qf, 'getByDateAsync').returns(Promise.resolve({ data: {}})); 
+0

私はこれを試してみたし、テストが失敗し、フック... はTypeError「それぞれの前に」エラーを受信:関数として未定義のプロパティgetByDateAsyncをラップしようとしました。 –

+0

次に、あなたのQFファイルは、その方法を公開していない、とあなたのコードはまったく実行されません。 – jishi

+0

いくつかの変更を行い、さらに詳細を追加しました...エラーが表示されます:qf.getByDateAsync(queryCriterion) TypeError:未定義は関数ではありません –

関連する問題