Angularjs 量角器测试$http拦截器
我正在尝试做一个角度量角器测试,它在提交时发送一个常规的ajax请求,然后在响应段截取该请求。$http拦截器打开一个自定义对话框,等待用户输入(用户/密码)进行进一步身份验证 问题是,量角器坐在那里等待HTTP响应完成,但从未完成,因为它被截获并只是超时。我找不到让量角器sendKeys访问这些对话框的方法,因为它仍在等待HTTP请求完成(因为它被截获了,所以永远不会完成) 因此,从本质上讲,量角器框架能否处理$http截获的响应,并在需要时提供额外的浏览器输入?或者有什么解决办法Angularjs 量角器测试$http拦截器,angularjs,http,protractor,Angularjs,Http,Protractor,我正在尝试做一个角度量角器测试,它在提交时发送一个常规的ajax请求,然后在响应段截取该请求。$http拦截器打开一个自定义对话框,等待用户输入(用户/密码)进行进一步身份验证 问题是,量角器坐在那里等待HTTP响应完成,但从未完成,因为它被截获并只是超时。我找不到让量角器sendKeys访问这些对话框的方法,因为它仍在等待HTTP请求完成(因为它被截获了,所以永远不会完成) 因此,从本质上讲,量角器框架能否处理$http截获的响应,并在需要时提供额外的浏览器输入?或者有什么解决办法 谢谢 通过
谢谢 通过将此脚本注入浏览器,可以拦截应用程序中的所有xhr调用。并存储对某个全局变量的响应,例如,我正在保存windows变量
(function(XHR) {
"use strict";
var open = XHR.prototype.open;
var send = XHR.prototype.send;
XHR.prototype.open = function(method, url, async, user, pass) {
this._url = url;
open.call(this, method, url, async, user, pass);
};
XHR.prototype.send = function(data) {
var self = this;
var oldOnReadyStateChange;
var url = this._url;
function onReadyStateChange() {
if(self.readyState == 4 /* complete */) {
/* This is where you can put code that you want to execute post-complete*/
/* URL is kept in this._url */
if(self._url=='api/v1/groups')
{
var request=JSON.parse(data);
if(request.method=='createGroup') {
var XHRInterceptObj=new Object();
XHRInterceptObj.request=request;
XHRInterceptObj.response=self;
window._groupCreation =XHRInterceptObj;
}
else if(request.method=='getGroupDetails') {
var XHRInterceptObj=new Object();
XHRInterceptObj.request=request;
XHRInterceptObj.response=self;
window._groupDetails =XHRInterceptObj;
}
}
}
if(oldOnReadyStateChange) {
oldOnReadyStateChange();
}
}
/* Set xhr.noIntercept to true to disable the interceptor for a particular call */
if(!this.noIntercept) {
if(this.addEventListener) {
this.addEventListener("readystatechange", onReadyStateChange, false);
} else {
oldOnReadyStateChange = this.onreadystatechange;
this.onreadystatechange = onReadyStateChange;
}
}
//console.log('data',data);
send.call(this, data);
}
})(XMLHttpRequest);
你们可以像这样从全局变量中得到响应数据
browser.executeScript('return window._groupCreation;').then(function(obj){
console.log(obj.responseText);
});
在这个脚本中,我们实际上使用prototype和拦截调用向XHR对象添加了额外的功能。如果您发布了一个代码示例,那么它的可能副本将有所帮助。你在用茉莉花吗?如果是这样,您是否研究过jasmine2中新的
done()
回调?