2017-11-17 31 views
0

何らかの理由で、私はこの単純なテストを以前に何回も使用した同様のセットアップで正しく実行するのに少し問題があります。nodejs - sinonスタブが呼び出されていない

私の方法generateReportが呼び出されておらず、私のstubsが目的の引数でトリガーされていない理由を理解するのに役立つかもしれませんか?

BYEGOODこれまで記録され、テストがエラーを返している:あなたがしているように見えます

const proxyquire = require('proxyquire') 
const assert = require('assert') 
const sinon = require('sinon') 
const fakeData = require('./data/sample-request.json') 


describe('report-exporter',() => { 
    describe('generateReport',() => { 
    const fakeError = new Error('Undefined is not a function') 

    let res, resSendStub, resStatusStub, resEndStub, resSetStub, resJsonStub, req, convertStub, generate 
    before(() => { 
     resSendStub = sinon.stub() 
     resJsonStub = sinon.stub() 
     resStatusStub = sinon.stub() 
     resEndStub = sinon.stub() 
     resSetStub = sinon.stub() 
     convertStub = sinon.stub() 

     res = { 
     send: function(errorCode) { 
      return resSendStub(errorCode) 
     }, 
     json: function(object) { 
      return resJsonStub(object) 
     }, 
     set: function(arg1, arg2) { 
      return resSetStub(arg1, arg2) 
     }, 
     status: function(code) { 
      return resStatusStub(code) 
     }, 
     end: function(data) { 
      return resEndStub(data) 
     } 
     } 
     req = { 
     body: {} 
     } 

     generate = proxyquire('./../index', { 
     './lib/convert': function() { 
      return convertStub 
     } 
     }) 
    }) 


    it('Should return an error response',() => { 
     convertStub.throws(fakeError) 
     generate.generateReport(req, res) 
     sinon.assert.calledWith(resSendStub, '500') 
    }) 
    }) 
}) 

答えて

0

AssertError: expected stub to be called with arguments

私のインデックスファイル:

const errorHandler = require('./lib/handlers/error-handler') 
const transformRequest = require('./lib/handlers/request-converter') 
const convert = require('./lib/convert') 

exports.generateReport = function generateReport(req, res) { 
    console.log('HELLO') 
    const objectToPopulateTemplate = transformRequest(req.body) 
    convert(objectToPopulateTemplate, function (e, data) { 
    if (e) { 
     console.log('BYE') 
     const error = errorHandler(e) 
     return res.send(error.httpCode).json(error) 
    } 
    console.log('GOOD') 
    res 
     .set('Content-Type', 'application/pdf') 
     .set('Content-Disposition', `attachment; filename=velocity_report_${new Date()}.pdf`) 
     .set('Content-Length', data.length) 
     .status(200) 
     .end(data) 
    }) 
} 

私のテストファイルをproxyquire./lib/convertが正しくありません。元のconvertobjectToPopulateTemplateでコールバックはfunction (e, data)です。それは、エラー処理と応答の送信を担当するコールバックです。

スタブ付きconvert機能は、提供されたコールバックについてはまったく気にしないので、コールバックは決して呼び出されません。

は、ほとんどの場合、あなたが望むものconvertStubにパラメータを渡すと、後でそれらに対処することです。

'./lib/convert': function(objectToPopulateTemplate, cb) { 
    return convertStub(objectToPopulateTemplate, cb); 
} 

、その後

it('Should return an error response',() => { 
    generate.generateReport(req, res); 
    const cb = convertStub.getCall(0).args[1]; 

    // simulate `convert` to fail 
    cb(fakeError); 

    sinon.assert.calledWith(resSendStub, '500') 
}) 
関連する問題