2015-03-18 8 views
6

यहाँ नाकाम रहने परीक्षा है:विफल उम्मीद: "अपेक्षित [] खाली सरणी होना चाहिए।"

describe("Checking errors", function() { 
    var scope = {}; 

    beforeEach(function() { 
     browser.get("/#endpoint"); 
     browser.waitForAngular(); 

     scope.page = new MyPage(); 
    }); 

    it("should not show any errors", function() { 
     expect(scope.page.errors).toBeEmptyArray(); 
    }); 
}); 

जहां MyPage एक पृष्ठ वस्तु है:

var MyPage = function() { 
    this.errors = element.all(by.css("div.error-block b.error")) 
     .filter(function (elm) { 
      return elm.isDisplayed().then(function (value) { 
       return value; 
      }); 
     }) 
     .map(function (elm) { 
      return elm.getText(); 
     }); 
}; 

module.exports = MyPage; 

जहां errors चाहिए होना को दिखाई त्रुटि ग्रंथों एक पृष्ठ पर पाया की एक सरणी।

Failures: 

    1) Checking errors should not show any errors 
    Message: 
    Expected [ ] to be empty array. 
    Stacktrace: 
    Error: Failed expectation 

FYI करें, toBeEmptyArray() मिलान jasmine-matchers तीसरे पक्ष के से आ रही है:

यहाँ त्रुटि हम हो रही है है।


मैं इस तरह से scope.page.errors का मूल्य प्रिंट करने की कोशिश की है:

scope.page.errors.then(function (errors) { 
    console.log(errors); 
}); 

और यह [] के रूप में बाहर छपा है। Array.isArray(errors)true देता है।

जो मैं देखता हूं, scope.page.errors एक खाली सरणी है, लेकिन उम्मीद विफल हो जाती है। मुझे क्या याद आ रही है?

+0

दौड़ा अगर आप Array.isArray लॉग इन करें (आप क्या मिलता है त्रुटियों)? – Ryan

+0

@Ryan यह उम्मीद नहीं कर रहा था, लेकिन यह 'सच' प्रिंट करता है .. अजीब। धन्यवाद। – alecxe

+0

क्या उम्मीद है (scope.page.errors.length) .toBe (0); 'काम? हो सकता है कि आप स्कॉप्स वेबड्राइवर (जैसे किसी पृष्ठ में iframes) से किसी समस्या में भाग ले रहे हों, जिनकी अपनी "ऐरे" परिभाषा है। Http://stackoverflow.com/a/2265999/960524 देखें (इसलिए यह 'toBeEmptyArray()' विधि में एक बग हो सकता है - यह शायद चेक के "सरणी" -नेस भाग में विफल रहा है।) –

उत्तर

3

उत्तर protractor src में चार पंक्तियों के नीचे है।

ElementArrayFinder extends Promise, जबकि जैस्मीन-मैचर्स first checks की जांच करते हैं कि त्रुटियां वास्तव में एक वास्तविक सरणी है कि Array.isArray is done, जो झूठी वापसी करेगी;

यह expect(scope.page.errors.length).toBe(0) के साथ भी अनिश्चित है क्योंकि वादे की लंबाई नहीं है।

बस अपने वादे पर errors.then चलाने के लिए, और परीक्षण है कि तर्क [] है आप यह भी पता चला है कि किया जा सकता है जब आप scope.page.errors.then

+0

धन्यवाद, मुझे यही संदेह है (टिप्पणियां देखें)। हालांकि, 'scope.page.errors' को 'तब()' के साथ हल करने में मदद नहीं मिली:' अपेक्षित [] खाली सरणी होना चाहिए। 'निम्न कोड का उपयोग करते समय:' scope.page.errors.then (फ़ंक्शन (त्रुटियां) {उम्मीद (त्रुटियों) .toBeEmptyArray();}); '। – alecxe

+0

दूसरे शब्दों में, यहां तक ​​कि हल किया गया मान भी एक सरणी नहीं है, यह एक सरणी जैसा दिखता है लेकिन यह नहीं है ("बतख" सिद्धांत के बारे में भूल जाओ :))। लेकिन, अब मेरे पास एक कामकाज है - मैं "लगभग एक सरणी" से बाहर एक सरणी बना रहा हूं: 'उम्मीद ([]। Concat (त्रुटियां))। ToeemptyArray(); '। वैसे भी +1 वर्थ। – alecxe

+0

दुर्भाग्यवश, उनका कार्यान्वयन ऑब्जेक्ट –

0
Inside test script your code line "scope.page = new MyPage();" is creating new empty MyPage object.Code which you have written in application script is creating page object locally and its not bounded with any angular scope.When there is requirement of testing such objects you need to replicate code for page object creation in beforeEach(); block of test script.And test it. 
describe("Checking errors", function() { 
    var scope = {}; 
    var MyPage ; 
    beforeEach(function() { 
     browser.get("/#endpoint"); 
     browser.waitForAngular(); 

     MyPage = function() { 
    this.errors = element.all(by.css("div.error-block b.error")) 
     .filter(function (elm) { 
      return elm.isDisplayed().then(function (value) { 
       return value; 
      }); 
     }) 
     .map(function (elm) { 
      return elm.getText(); 
     }); 
}; 
    }); 

    it("should not show any errors", function() { 
     expect(MyPage.errors).toBeEmptyArray(); 
    }); 
}); 
+0

के ट्रेसिंग का परीक्षण करके 'बतख' सिद्धांत का पालन नहीं करता है, हालांकि भागीदारी के लिए धन्यवाद, हालांकि यह प्रश्न का उत्तर नहीं देता है। – alecxe

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