2017-12-11 10 views
0

http-proxy、sinon & rewireを使用して、イベントエミッタで高速ミドルウェアの単体テストを作成しようとしています。私が実行している問題は、外部モジュール(この場合はhttp-proxy)をスタブしてevent.onの行に達したときに、そのモジュールが未定義になっているためです。相続人イベントエミッターでエクスプレスミドルウェアをテストする方法

ソースコードのスニペット:

let middleware = function(options) { 
    proxy.__proto__ = middleware; 
    proxy.proxy = buildProxy(extend({}, DEFAULT_OPTIONS, options)); 
    _options = options || {}; 

    proxy.proxy.on('error', function(e, req, res) { // <--- Cannot read property of undefined 
     logger(req, res, e); 
    }); 
    proxy.proxy.on('proxyRes', function(proxyRes, req, res) { 
     logger(req, proxyRes); 
    }); 
    return proxy; 
}; 

// This method is stubbed 
let buildProxy = function(options) { 
    return httpProxy.createProxyServer(options); // http-proxy module 
}; 

テストコードのスニペット:

it.only('should call buildProxy and pass along options',() => { 
    const testOptions = { someOption: true } 

    let applicationUnderTest = rewire(UNDER_TEST); 
    let methodUnderTest = applicationUnderTest.__get__('middleware'); 
    let buildProxySpy = sinon.spy(); 

    applicationUnderTest.__set__('buildProxy', buildProxySpy); 

    methodUnderTest(testOptions) 

    expect(buildProxySpy.calledOnce).to.be.true; 
}) 

私はこの問題を回避する方法についての提案を探していました。

テスト結果:

1) Proxy legacy/integration tests should call buildProxy and pass along options: 
    TypeError: Cannot read property 'on' of undefined 

答えて

0

あなたが呼ばれたときに何かを返すために、あなたのスパイに指示する必要があります。 sinonでは、これは実際にスタブになります。

... 
let buildProxySpy = sinon.stub(); 
buildProxySpy.returns({ 
    proxy: { on: sinon.spy() } 
}); 
... 

そしてもちろん、あなたはその返されたオブジェクトのメソッド、およびに渡されたメソッドの動作を検証するためのテストへの呼び出しを確認し、追加のテストを作成したいと思いますスパイはスタブによって返された

関連する問題