使用例如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
无法从构造函数外部访问。你会怎么测试呢?
答案 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();