2016-04-28 12 views
0

私は2つのファイルを持っています。node.jsのイベントエミッタを使用して刺激を受けるクラス内で関数をモックできません

listener.js:のように定義されたイベントと

'use strict';  
var events = require('./g-events');  
function start() { 
    console.log('starting'); 
} 

events.on(events.ACTIVITY_EVENT, function() { 
    console.log('i am in here'); 
    start(); 
}); 

// Public functions 
module.exports = { 
    start: start 
}; 

'use strict'; 
var EventEmitter2 = require('eventemitter2').EventEmitter2; 

var m = new EventEmitter2({ 
    newListener: false, 
    maxListeners: 20 
}); 
m.ACTIVITY_EVENT = 'activityEvent'; 
module.exports = m; 

エンドポイントをテストするテスト・クラスを作成しました。

var listener = require('../listener'); 
var events = require('../g-events');  

describe('test listener', function() { 
    listener.start = function() { 
    console.log('fake start'); 
    }; 
    it('test listener', function() { 
    events.emit(events.ACTIVITY_EVENT); 
    }); 
}); 

テストが実行されると、出力は「私はここにあります」、次に「開始」です。 私のテストで定義された開始関数を適切にオーバーライドしないのはなぜですか?

+0

テスト関数 'listener.start'の中で、' listerner.js'の 'module.exports'オブジェクトを参照して、オブジェクトプロパティを変更するだけです。 'listener.js'の' start() '関数ではありません – zeronone

+0

startメソッドをスタブする適切な方法は何ですか? 私の最終目標はsinonを使用してそれをスタブしています。 – neelzp

答えて

0

sinonを使用してメソッドをスタブしても、それは元のメソッドを評価しました。

sinonがエクスポートされた方法をスタブすることができなかった理由は完全にはわかりませんが、私は再配線https://github.com/jhnns/rewireに絡み合いました。

関連する問題