如何在casper.js中捕获和测试socket.io事件

时间:2014-08-11 18:23:12

标签: javascript node.js sockets casperjs

我使用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毫秒并断言服务器已发出我期望看到的内容。这似乎是一个日常用例,但我在完成整个循环工作时遇到了麻烦。

(注意,在我的更新中,我发现了正在发生的错误,而且它在其他地方,所以我更新了以显示什么不能正常工作而不是错误)

1 个答案:

答案 0 :(得分:0)

我发现了这个问题:

在我的test_include.js文件中,我错误地推送了数组。

document.emits.push(Array.prototype.slice.call(arguments));

我不确定为什么我只是在不切片的情况下推送参数,但这不起作用。