2013-11-02 14 views
14

का उपयोग करते समय पृष्ठ के साथ सिंक के लिए प्रतीक्षा करने वाले प्रोटैक्टर समय मैं एक छोटे AngularJS ऐप के साथ प्रोटैक्टर का परीक्षण कर रहा हूं।

इस परीक्षा है:

describe('Testing Protractor', function() { 
    var draftList; 

    it('should count the number of drafts', function() { 
    browser.get('#/'); 
    draftList = element.all(by.repeater('newsletter in drafts')); 
    expect(draftList.count()).toEqual(2); 
    }); 
}); 

नियंत्रक:

angular.module('myApp.controllers', []). 
    controller('DraftsCtrl', ['$scope', 'Draft', function($scope, Draft) { 
    $scope.drafts = Draft.query(); 
}]) 

ड्राफ्ट सेवा:

:

angular.module('myApp.services', ['ngResource']). 
    factory('Draft', ['$resource', 
    function($resource) { 
     return $resource('api/drafts/:id') 
    }]) 

इस परीक्षण निम्न त्रुटि में कोणमापक परिणामों का उपयोग चल रहा है

हालांकि, नियंत्रक में मैं इस लाइन बदलते हैं:

$scope.drafts = Draft.query(); 
इस के लिए

:

$scope.drafts = []; 

परीक्षण की उम्मीद है, लेकिन अधिक महत्वपूर्ण बात के रूप में विफल रहता है: उसका समय नहीं है।

क्वेरी() सक्षम है, ब्राउज़र में मैन्युअल रूप से ऐप चलाने पर और प्रोटैक्टर द्वारा खोले गए ब्राउज़र विंडो को देखते समय, एपीआई द्वारा लौटाए गए डेटा को दोहराने वाले द्वारा सही ढंग से प्रदर्शित किया जाता है।

प्रोटोकेटर पृष्ठ के साथ सिंक्रनाइज़ करने में सक्षम क्यों नहीं है जब सेवा एपीआई के साथ संचार कर रही है?

कोणीयजेएस v1.2.0-rc3 है। प्रोटैक्टर v0.12.0 है।

उत्तर

26

यह known issue है, लेकिन एक अस्थायी कामकाज है। ptor.ignoreSynchronization = true सेट करें।

उदाहरण के लिए:

describe('Testing Protractor', function() { 
    var draftList; 
    var ptor; 

    beforeEach(function() { 
    ptor = protractor.getInstance(); 
    ptor.ignoreSynchronization = true; 
    }); 

    it('should count the number of drafts', function() { 
    ptor.get('#/'); 
    draftList = element.all(by.repeater('newsletter in drafts')); 
    expect(draftList.count()).toEqual(2); 
    }); 
}); 
+1

धन्यवाद, मैं इस बाद में आज़माने और आप जानते हैं कि क्या यह काम दूँगा। मैंने वास्तव में यहां पोस्ट करने से पहले गिटहब मुद्दे को पढ़ा था, लेकिन मैं इस धारणा के तहत था कि वर्कअराउंड केवल तब आवश्यक होता है जब एक नियमित एपीआई पर एक एपीआई मतदान करते हैं जो मेरा टेस्ट ऐप नहीं कर रहा है। जब नियंत्रक प्रारंभ होता है तो यह केवल एक बार एपीआई अनुरोध भेजता है। –

+10

यह वास्तव में सही समाधान था। चूंकि प्रोटैक्टर 0.12.0 प्रोटैक्टर के उदाहरण को 'ब्राउजर' के रूप में उजागर करता है, इसलिए 'element.ignore सिंक्रनाइज़ेशन = सत्य' को 'element.all (by.repeater (' ... ') से पहले' 'जोड़ने के लिए पर्याप्त था); '। –

+0

पूरी तरह से काम करता है! – softvar

3

browser.ignoreSynchronization = true; मेरे लिए बाहर काम किया।

1

मैं प्रोटैक्टर 3.3.0 का उपयोग कर रहा हूं और इसे अपने परीक्षण में काम करने के लिए इसे अनदेखा सिंक्रनाइज़ेशन को तब तक रोकना पड़ा जब तक मैंने सेटअप नहीं किया।

तो मेरी beforeEach में मैं अपने कॉल कार्रवाई:

var searchBox = element(by.css('#inpt_search')); 
searchBox.sendKeys('test'); 

मैं तो नकली बैकएंड के लिए इंतजार करना दृश्य को भरने के लिए है (इसलिए यदि किसी को भी एक बेहतर तरीका है मैं इन sleep कॉल के बारे में खुश नहीं हूँ ऐसा करने के लिए कृपया टिप्पणी करें, browser.sleep(500) का उपयोग करके मुझे expectedConditions.presenceOf काम करने के लिए एक ही बग का हिस्सा नहीं मिल सकता है)। फिर परीक्षण में मैंने browser.ignoreSynchronization = true सेट किया जो जो भी अवरुद्ध है और ब्राउजर सामग्री को देखता है।

describe('standard search', function(){ 
    beforeEach(function(){ 
     openApp(); 
     var searchBox = element(by.css('#inpt_search')); 
     searchBox.sendKeys('test'); 
     browser.sleep(500); 
    }); 
    it('should work or summat', function() { 
     browser.ignoreSynchronization = true; 
     var fileItems = element.all(by.repeater('item in list')); 
     expect(fileItems.count()).toEqual(50); 
    }); 
}); 
+0

धन्यवाद स्टीवो, यह मेरे लिए प्रोटैक्टर 4.0.10 पर काम करता है –

0
इसके बजाय browser.ignoreSynchronization का उपयोग करने का

, browser.waitForAngularEnabled(*boolean*) का उपयोग करें। browser.waitForAngularEnabled(false)browser.ignoreSynchronization से true, browser.waitForAngularEnabled(true)browser.ignoreSynchronizationfalse पर सेट करता है।

आप भी अपने परीक्षण स्वीट 'कॉन्फ़िग फ़ाइल के हिस्से के रूप में इस में शामिल हैं:

onPrepare: function() { 
    'use strict'; 
    browser.waitForAngularEnabled(false); 
} 
संबंधित मुद्दे