我正在尝试使用http-proxy,sinon& amp;来编写带有事件发射器的快速中间件的单元测试。重新连接。我遇到的问题是当我将外部模块(在这种情况下为Content-Type
)存根到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;
})
答案 0 :(得分:0)
你需要指示你的间谍在被召唤时返回一些东西。对于sinon,这实际上是一个存根:
...
let buildProxySpy = sinon.stub();
buildProxySpy.returns({
proxy: { on: sinon.spy() }
});
...
当然,您还需要编写额外的测试来验证对返回的对象方法的调用,并测试以验证传递给存根返回的间谍的方法的行为。