2015-05-03 4 views
1

Я пытаюсь следить за WebSocket строительства с использованием sinon.js с этим кодом (requirebin):Sinon шпионить WebSocket

sinon = require('sinon'); 

sinon.spy(window, 'WebSocket'); 
// throws an error (see console) 
new window.WebSocket("ws://example.com"); 

В Chrome это не удается с Uncaught TypeError: Failed to construct 'WebSocket': Please use the 'new' operator, this DOM object constructor cannot be called as a function.

В Safari или PhantomJs он терпит неудачу с TypeError: Attempted to wrap object property WebSocket as function

Что я делаю неправильно?

ответ

1

Я получил ответ от Sinon соавтора на GitHub: https://github.com/cjohansen/Sinon.JS/issues/743

TL; DR: Коренные объекты являются ненадежными, как шпионскими/гася целями. Оберните их в свои тонкие обертки, а затем шпионить за ними:

// totally making things up here 
function WrapWebSocket(){ 
    return window.WebSocket; 
} 

// in your code 
function init(){ 
    var WS = WrapWebSocket(); 
    var ws = new WS(); 
} 

// in your test 
var spy = sinon.spy(); 
sinon.stub(window, 'WrapWebSocket', function(){ 
    return spy; 
}); 
init(); 
assert(spy.calledWith('someurl'); 
Смежные вопросы