我想测试使用sockjs实现的Web套接字。
var sock = new SockJS('http://mydomain.com/my_prefix');
sock.onopen = function() {
console.log('open');
};
sock.onmessage = function(e) {
console.log('message', e.data);
};
sock.onclose = function() {
console.log('close');
};
我目镜,只找到了这篇文章。这还不够好,因为它正在建立实际的联系而不是伪造它。
我也尝试过,但在这里只发现了一个未解决的问题。
有人建议 sinonjs,但我找不到任何像样的例子。
如果有人能阐明这个话题,我将不胜感激。
当您想要对访问外部资源的功能进行单元测试时,例如在您的例子中为 websocket 服务器,通常的方法是使用 mock-对象来表示外部资源。 模拟对象是一个外观和行为类似于外部资源的对象,但实际上并不访问它。此外,它可以具有日志记录功能,如果测试的代码的行为符合预期,它就可以向测试代码报告。
在您的情况下,您将创建一个模拟SockJS对象,该对象具有普通SockJS对象的所有相关属性和方法,但其实现实际上并未与服务器联系。它仅记录方法调用并返回现有服务器将发送的预期响应。
然后,您将重构要测试的代码,以便它不会创建套接字本身,而是从外部获取分配的套接字对象(这称为"依赖注入",是编写单元可测试代码的关键习惯用法(。
在实际代码中,你分配一个真正的 SockJS 对象。但是在你的单元测试中,你分配你的模拟对象。调用测试方法后,您可以检查模拟对象以检查设备是否将预期数据发送到服务器。