2017-12-11 10 views
0

http-proxy, sinon & rewire를 사용하여 이벤트 이미 터가있는 고속 미들웨어의 단위 테스트를 작성하려고합니다. 내가 겪고있는 문제는 외부 모듈 (이 경우 http-proxy)을 스터브하면 event.on 라인에 도달 할 때 정의되지 않았기 때문입니다. 소스 코드의이벤트 에미 터를 사용하여 Express 미들웨어를 테스트하는 방법

Heres는 코드 조각 : 테스트 코드의

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() } 
}); 
... 

물론, 당신은 전달 방법의 동작을 확인하기 위해 추가로 그 객체 방법을 반환에 전화를 확인하는 테스트 및 테스트를 작성하는 것이 좋습니다 스파이가 스텁에서 돌아 왔습니다.