如何使用Mocha / Sinon测试嵌套回调?

时间:2014-11-24 21:26:19

标签: unit-testing mocha sinon

使用例如Mocha / Sinon测试这段JavaScript代码的正确方法是什么:

var App = function(endPoint, successCallback) {
    var channel = new WebSocket(endPoint);
    channel.onopen = function(ev) {
        successCallback();
    };
};

我想到这样的事情:

describe('App', function() {
    it('test should create instance and call success', function(done) {
        var app = new App('ws://foo.bar:123/', done);
        var stub = sinon.stub(app, 'channel');
        stub.yield('onopen');
    });
});

显然,这不起作用,因为channel无法从构造函数外部访问。你会怎么测试呢?

1 个答案:

答案 0 :(得分:1)

为什么不为Websocket创建工厂,例如:

var myApp = {
    createWebsocket: function () {
        return new Websocket;
    }
};

这会使myApp.createWebsocket返回值channel上的间谍变得非常容易:

sinon.spy(myApp, 'createWebsocket);
var channel = myApp.createWebsocket.firstCall.returnValue;
var stub = sinon.stub(channel, 'onopen');
stub.yield('onopen');

// Clean up
myApp.createWebsocket.restore();