2014-09-01 198 views
4

我想做一個角度量角器測試提交發送一個正常的ajax請求,然後在響應腿截獲。 $ http攔截器打開一個自定義對話框,等待用戶輸入(用戶/密碼)以進一步驗證。

問題是量角器坐在那裏等待HTTP響應完成,但從來沒有做,因爲它已被攔截並且簡單地超時。我找不到將量角器sendKeys添加到這些對話框的方法,因爲它仍在等待HTTP請求完成(它從不會被截取)。

因此,本質上,量角器框架可以處理$ http截獲的響應,並在需要時提供額外的瀏覽器輸入?或者有任何解決方法?

謝謝!

+0

[在量角器測試中修改http響應]的可能的重複(http://stackoverflow.com/questions/26506331/modify-an-http-response-in-a-protractor-test) – 2014-12-19 18:35:44

+0

這將有助於你發佈了一個代碼示例。你在用茉莉花嗎?如果是這樣,你看看jasmine2中新的'done()'回調嗎? – finspin 2015-07-25 08:32:47

回答

1

通過將此腳本注入到瀏覽器中,可以攔截應用程序中的所有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對象添加了附加功能。