如何使用事件发射器测试快速中间件

时间:2017-12-11 14:29:49

标签: node.js unit-testing

我正在尝试使用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;
})

1 个答案:

答案 0 :(得分:0)

你需要指示你的间谍在被召唤时返回一些东西。对于sinon,这实际上是一个存根:

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

当然,您还需要编写额外的测试来验证对返回的对象方法的调用,并测试以验证传递给存根返回的间谍的方法的行为。