13

मैं एक परीक्षण है जो हर बार मैं इसे चलाने के लिए, फेंकता है "अज्ञातत्रुटि: अज्ञात त्रुटि:। अधिकतम कॉल स्टैक आकार से अधिक हो"कोणमापक/चमेली परीक्षण फेंकता "अज्ञातत्रुटि: अज्ञात त्रुटि: अधिकतम कॉल स्टैक आकार से अधिक हो"

यह परीक्षण मेरी सेवाओं में से एक में एक विधि को कॉल कर रहा है जो Google ड्राइव को लिखता है।

असफल होने वाला परीक्षण "ui" के साथ मेरे डूड्राइव फ़ंक्शन को कॉल कर रहा है, जिसका अर्थ है ड्राइव आइटम अपडेट करना। यदि मैं एक एकल चरित्र "ui" -> "ni" बदलता हूं, जिसका अर्थ है एक नया ड्राइव आइटम बनाएं, परीक्षण कार्य करता है। परीक्षण के तहत कोड सामान्य उपयोग में ठीक काम करता है।

it('should update a file', function() { 
browser.executeAsyncScript(function(callback) { 
    // get service 
    var service=angular.element(document.getElementById('ngapp')).injector().get('DriveQ') 
    // generate a title 
    var title = 'title of file'; 
    // call doDrive to create a new file 
    service.doDrive({t:'ui',id:'0B6B-RNrxsCu2Sll7JZTYy2aDA', item:{title:title}}) 
     .then(function (resp){ 
        resp.originalTitle=title; 
        callback(resp) 
      }); 
}).then(function(resp) { 
    expect(resp.title).toEqual(resp.originalTitle); 
}); 
}); 

मैं क्रोम का उपयोग कर रहा webdriver सीधे, और मैं भी browser.ignoreSynchronization = true;

+0

आपकी सेवा कैसी दिख रही है? –

+0

यह कोड का एक बड़ा जटिल टुकड़ा है जो Google ड्राइव REST API लेन-देन बनाता है और सबमिट करता है। मुख्य बिंदु ... (1) सेवा ठीक काम करती है, यह केवल परीक्षण है जो टूटा हुआ है, (2) कोड पथ वर्किंग टेस्ट (रीस्ट पुट) और जो विफल रहता है (रीस्ट पोस्ट) के बीच लगभग समान है। क्या सेवा का कुछ विशिष्ट पहलू है जो प्रासंगिक हो सकता है? – pinoyyid

+0

ऐसी कुछ चीजें हैं जो आम तौर पर उस विशेष अपवाद को ट्रिगर करती हैं। दिमाग में आने वाली स्पष्ट बात एक वस्तु –

उत्तर

13

मैं एक ही समस्या हो रही है है। मैंने पाया है कि ब्राउजर से प्रोटैक्टर तक बड़ी ऑब्जेक्ट्स लौटने से "अज्ञात त्रुटि: अज्ञात त्रुटि: अधिकतम कॉल स्टैक आकार पार हो गया" त्रुटि।

आपको resp ऑब्जेक्ट की जटिलता की जांच करनी चाहिए जिसे आप कॉलबैक के साथ वापस भेज रहे हैं। यदि यह बहुत बड़ा है, तो कम डेटा वापस भेजने का प्रयास करें।

यह executeAsyncScript, executeScript और evaluate (जो executeScript का उपयोग करें) के साथ हो सकता है।

ओपी द्वारा संपादित करें ...

callback({title:resp.title}) को callback(resp) बदलने, यानी लौटे वस्तु को सरल बनाने केवल उन वस्तुओं है कि मैं कर रहा हूँ aserting को रोकने के लिए द्वारा ठीक किया गया।

+1

मुझे पता चला कि आप ब्राउज़र पर बहुत बड़ी ऑब्जेक्ट्स पास नहीं कर सकते हैं। मैं तत्व में पास करने के लिए 'browser.executeScript' के दूसरे पैरामीटर का उपयोग करता हूं, और इस त्रुटि से बचने के लिए' getWebElement' फ़ंक्शन का उपयोग करना पड़ा। – Olov

संबंधित मुद्दे