簡體   English   中英

如何在casper.js中捕獲和測試socket.io事件

[英]how to capture and test for socket.io events in casper.js

我正在使用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");
})();

注入完成運行,所以我知道injectjs在工作。 然后,在我的測試用例中,檢查它是否完全正常工作:

casper.evaluate(function(){
    main_socket.emit('testin');
    console.log("EMITS", JSON.stringify(document.emits));
});

輸出基本上顯示沒有發出任何信號,即使我只是發出了一些信號:

EMITS [{}]

對於我的最終目標,我希望能夠單擊鏈接,斷言發出了正確的socket.io事件,等待500ms並斷言服務器已經發出了我希望看到的內容。 看來這將是每天的用例,但我在使整個周期正常工作方面遇到了麻煩。

(請注意,在我的更新中,我發現了正在發生的錯誤,並且在其他地方,所以我進行了更新以顯示什么在起作用而不是錯誤)

我發現了問題:

在我的test_include.js文件中,我錯誤地推入了陣列。

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

不知道為什么我只是在推論而不切分,但這是行不通的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM