我使用Casperjs测试socket.io应用程序。我希望有能力断言从服务器和客户端发生了不同的发射,但我下面的代码一直给我错误。
我的测试设置中有以下行:
casper.page.injectJs('test_include.js');
test_include.js看起来像:
document.emits = [];
document.ons = [];
(function(){
var _origEmit = main_socket.emit;
main_socket.emit = function(){
console.log("SENT", Array.prototype.slice.call(arguments));
document.emits.push(arguments);
_origEmit.apply(this, Array.prototype.slice.call(arguments));
}
var _origOn = main_socket.$emit;
main_socket.$emit = function(){
console.log("RECEIVED", Array.prototype.slice.call(arguments));
document.ons.push(arguments);
_origOn.apply(this, Array.prototype.slice.call(arguments));
}
console.log("Injection complete");
})();
注射完成,所以我知道注射器正在工作。然后,在我的测试用例中,我检查它是否正常工作:
casper.evaluate(function(){
main_socket.emit('testin');
console.log("EMITS", JSON.stringify(document.emits));
});
并且输出显示基本上没有任何发射,即使我只是发出了一些东西:
EMITS [{}]
为了我的最终目标,我希望能够点击链接,声明发出了正确的socket.io事件,等待500毫秒并断言服务器已发出我期望看到的内容。这似乎是一个日常用例,但我在完成整个循环工作时遇到了麻烦。
(注意,在我的更新中,我发现了正在发生的错误,而且它在其他地方,所以我更新了以显示什么不能正常工作而不是错误)
答案 0 :(得分:0)
我发现了这个问题:
在我的test_include.js文件中,我错误地推送了数组。
document.emits.push(Array.prototype.slice.call(arguments));
我不确定为什么我只是在不切片的情况下推送参数,但这不起作用。