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