如何在测试 angular 页面时模拟 jquery ajax 调用

How to mock jquery ajax call while testing angular page

我正在使用 protractor 为我的 angular 页面编写 e2e 测试。 我使用 $httpBackend 模拟由 $http 发送的请求 但是在一个旧页面中,我发现 jquery ajax 来自通过 jquery ajax 发送调用的插件。 我注意到它不能被 $httpBackend

嘲笑

模拟这些东西的最佳解决方案是什么?

经过调查,我发现非常简单的方法来处理来自 angular 页面的 jquery ajax 调用(由 jquery ajaxForm 插件制作) 在我们的测试规范中,我只是把

browser.executeScript( '$.fn.ajaxForm = function(form){return{submit: function(){form.success([{result: "ok"}]);}}}' );

所以我以这种方式模拟了 jquery ajaxForm 插件发送的请求。

同样我们可以模拟原生 JS XMLHTTPRequest 对象

            window.XMLHttpRequest = function(){
                return{
                    send: function(){return true;},
                    open: function(){return true;},
                    status: 200,
                    responseText: '{result: "ok"}',
                    getAllResponseHeaders: function(){return true;},
                    readyState: 4
                }
            }