2017-11-07 4 views
2

私はサービスコールをサービスに転送するプロキシモジュールを持っています。このプロキシモジュール内の関数が呼び出されたときに、サービス関数が呼び出されたかどうかをテストします。ここでSinon - スタブモジュールの機能とそれを依存性の注入なしでテストする

は、プロキシモジュールです:

const expect = require('expect.js') 
const sinon = require('sinon') 
const entity = require('../entity') 
const payService = require('../../services/pay') 

describe('Payment entity,',() => { 

    it('should proxy functions to each service',() => { 

     const stub = sinon.stub(payService, 'payByCardToken') 
     entity.chargeCard() 
     expect(payService.payByCardToken.called).to.be.ok() 

    }) 
}) 

しかし、テストがで失敗します:this examplethis responseに基づいて

const payService = require('../services/pay') 
const walletService = require('../services/wallet') 

const entity = { 
    chargeCard: payService.payByCardToken, 
    // ... some other fn 
} 

module.exports = entity 

、私は必要なモジュールのpayService」をスタブにしてみました

0 passing (19ms) 
    1 failing 

    1) Payment entity, 
     should proxy functions to each service: 
    Error: expected false to be truthy 
     at Assertion.assert (node_modules/expect.js/index.js:96:13) 
     at Assertion.ok (node_modules/expect.js/index.js:115:10) 
     at Function.ok (node_modules/expect.js/index.js:499:17) 
     at Context.it (payments/test/entity.js:14:56) 

これは、payServiceモジュールが本当にスタブではないためですベッド。

// entity 
const entity =() => { 
    return { 
     payService, 
     chargeCard: payService.payByCardToken, 
     // .. some other fn 
    } 
} 

// test 
const stub = sinon.stub(payService, 'payByCardToken') 
entity().chargeCard() 
expect(payService.payByCardToken.called).to.be.ok() 

// test output 
Payment entity, 
    ✓ should proxy functions to each service 

1 passing (8ms) 

をしかし、それは唯一のテストpuposesのために追加のコードです:私は、エンティティのプロパティとしてpayServiceを追加し、機能ですべてを包む場合、テストは合格します知っています。依存性注入や回避策なしでモジュール関数をスタブする方法はありますか?

答えて

1

entityが既にマッピングを設定した後に、payServiceが遅すぎるという問題があります。

あなたがそうのようなテストコードを変更した場合:

const expect = require('expect.js') 
const sinon = require('sinon') 
const payService = require('../../services/pay') 

describe('Payment entity,',() => { 
    let entity 

    before(() => { 
     sinon.stub(payService, 'payByCardToken') 
     entity = require('../entity') 
    }) 

    it('should proxy functions to each service',() => { 
     entity.chargeCard() 
     expect(payService.payByCardToken.called).to.be.ok() 
    }) 
}) 

...あなたはentityあなたのスタブ機能を備えたセット自体をアップし、アサーションは大丈夫渡すことを見つける必要があります。

+0

はい、これは、ありがとうございました! – AFMeirelles

関連する問題