通過將此腳本注入到瀏覽器中,可以攔截應用程序中的所有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);
});
在這個腳本中,我們實際上是使用原型和攔截調用爲XHR對象添加了附加功能。
[在量角器測試中修改http響應]的可能的重複(http://stackoverflow.com/questions/26506331/modify-an-http-response-in-a-protractor-test) – 2014-12-19 18:35:44
這將有助於你發佈了一個代碼示例。你在用茉莉花嗎?如果是這樣,你看看jasmine2中新的'done()'回調嗎? – finspin 2015-07-25 08:32:47