2016-08-13 19 views
16

मैं कोणीय के लिए बहुत नया हूं और मैं अभी भी इसमें से अधिकतर को समझने की कोशिश कर रहा हूं। मैं कोणीय 1.5.8 का उपयोग करके कुछ परीक्षण लिख रहा हूं जिसे मैंने यमन जनरेटर से उत्पन्न किया था।टाइप एरर: अपरिभाषित कोई निर्माता नहीं है

विशेष रूप से, मैं यह पता लगाने की $ httpBackend परिणामों में हेरफेर करने के लिए कैसे (मैं सुनिश्चित नहीं हूं कि अगर महत्वपूर्ण है या नहीं) कोशिश कर रहा हूँ ...

मेरी app.js में दाखिल मैं निम्नलिखित कोड है:

.run(['$rootScope', '$location', 'breadcrumbService', function ($rootScope, $location, breadcrumbService) { 
    $rootScope.$on('$viewContentLoaded', function() { 
     jQuery('html, body').animate({scrollTop: 0}, 200); 
    }); 

    $rootScope.isEditMode = false; 
    $rootScope.$on('$stateChangeSuccess', function() { 
     // ------------ this next line is failing ----------- 
     $rootScope.isEditMode = $location.path().toLowerCase().endsWith('/edit') || $location.path().toLowerCase().endsWith('/new'); 
    }); 

    $rootScope.parseJson = function (value) { 
     return angular.fromJson(value); 
    }; 

    $rootScope.bc = breadcrumbService; 

    $rootScope.title = ""; 
}]) 

आधा रास्ते नीचे (जहां मैंने टिप्पणी जोड़ा) असफल रहा है। विशेष रूप से, endsWith समारोह इस त्रुटि के साथ, (toLower ठीक है) विफल हो रहा है:

PhantomJS 2.1.1 (Windows 8 0.0.0) Service: breadcrumbService should return breadcrumb label in json format FAILED 
     TypeError: undefined is not a constructor (evaluating '$location.path().toLowerCase().endsWith('/edit')') in app/scripts/app.js (line 44) 
     app/scripts/app.js:44:72 
     [email protected]_components/angular/angular.js:18005:33 
     bower_components/angular-ui-router/release/angular-ui-router.js:3353:32 
     [email protected]_components/angular/angular.js:16383:30 
     bower_components/angular/angular.js:16399:39 
     [email protected]_components/angular/angular.js:17682:28 
     [email protected]_components/angular/angular.js:17495:36 
     [email protected]_components/angular/angular.js:17790:31 
     [email protected]_components/angular/angular.js:11831:53 
     [email protected]_components/angular-mocks/angular-mocks.js:1368:17 
     [email protected]_components/angular-mocks/angular-mocks.js:1808:26 
     test/spec/services/breadcrumbservice.js:33:27 
     [email protected]_components/angular/angular.js:4718:24 
     [email protected]_components/angular-mocks/angular-mocks.js:3085:26 

यहाँ अपने परीक्षण कोड है (कुछ जंक विभिन्न उदाहरणों से संशोधित - बस इसे काम करने के लिए प्राप्त करने की कोशिश):

'use strict'; 

describe('Service: breadcrumbService', function() { 

    // load the service's module 
    beforeEach(module('myModule')); 

    var $httpBackend, $rootScope, createController, authRequestHandler; 
    beforeEach(inject(function($injector) { 

     $httpBackend = $injector.get('$httpBackend'); 
     console.log('Is null? '+ ($httpBackend == null)); 
     $httpBackend.whenGET(/views\/.*/).respond(200, [{}, {}, {}]); 

     authRequestHandler = $httpBackend.when('GET', '/api/v1/SiteStagings') 
      .respond({userId: 'userX'}, {'A-Token': 'xxx'}); 

     // Get hold of a scope (i.e. the root scope) 
     $rootScope = $injector.get('$rootScope'); 
     $httpBackend.flush(); 
    })); 

    // instantiate service 
    var breadcrumbService; 
    beforeEach(inject(function (_breadcrumbService_) { 
     breadcrumbService = _breadcrumbService_; 
    })); 

    it('svc should exist', function() { 
     expect(!!breadcrumbService).toBe(true); 
    }); 

    it('should return breadcrumb label in json format', function() { 
     var result = breadcrumbService.getFromCache('site', 'SiteGroupStagings', 46, 'SiteGroupDesc'); 
     console.log(result); 
     expect(!!result).toBe(true); 

    }); 
}); 

मुझे शक नहीं है कि मैं यहां कुछ गलत कर रहा हूं, मैं समझ नहीं पा रहा हूं कि यह क्या है। इस त्रुटि का वास्तव में क्या अर्थ है और यह मेरी कॉल को endsWith पर क्यों पसंद नहीं करता है?

धन्यवाद

उत्तर

30

"अपरिभाषित एक निर्माता नहीं है" एक त्रुटि संदेश है जब आप परिभाषित नहीं किए गए फ़ंक्शन को कॉल करने का प्रयास करते हैं तो PhantomJS प्रदर्शित करता है। यह ईसीएमएस्क्रिप्ट के संस्करण पर निर्भर करता है जो आपके फैंटॉमजेएस का समर्थन करता है। इसलिए जैसा कि आपने कहा है कि यह क्रोम में ठीक काम करता है, क्योंकि यह ब्राउज़र उस फ़ंक्शन का समर्थन करता है जिसका आप परीक्षण में उपयोग कर रहे हैं। अपनी समस्या को ठीक करने के लिए और अभी भी फ़ैंटॉमजेएस का उपयोग करने में सक्षम होने के लिए आप "अज्ञात से फैंटॉमजेएस" फ़ंक्शन को अपने आप से बदल सकते हैं।

8

मैं क्या है या नहीं एक जवाब या मेरे सवाल का सिर्फ एक संपादन के रूप में इस पोस्ट करने के लिए है, लेकिन मुझे लगता है कि बहस यह मेरा उत्तर (अब के लिए) है:

ऐसा लगता है समस्या से संबंधित है PhantomJS। जैसे ही मैंने इंजन को karma.conf.js फ़ाइल में क्रोम में बदल दिया, वे परीक्षण पास हुए।

मुझे अभी भी पता नहीं है कि त्रुटि संदेश का क्या अर्थ है और यह फ़ैंटॉमजेएस के साथ क्यों काम नहीं कर रहा था, लेकिन कम से कम अब मैं जारी रखने में सक्षम हूं। , मैं सूचना है कि endsWith ECMAScript6 के लिए नई है था (मैं सोच रहा था कि यह बड़ा था) - Btw

browsers: [ 
//'PhantomJS', 
'Chrome' 
], 

// Which plugins to enable 
plugins: [ 
'karma-chrome-launcher', 
//'karma-phantomjs-launcher', 
'karma-jasmine' 
], 

:

यहाँ मेरी karma.conf.js के लिए संशोधन कर रहे हैं (इस मामले में किसी को भी उत्सुक है) लेकिन वेबस्टॉर्म दिखाता है कि यह कोणीय-यूई-ग्रिड में एक सहायक समारोह का संदर्भ दे रहा है। मैंने kui.conf.js फ़ाइल में files सरणी के साथ गड़बड़ करने में काफी समय बिताया, यह देखने के प्रयास में कि यूई-ग्रिड निर्भरता बहुत देर हो चुकी है या कुछ। प्रत्येक परीक्षण में, यह क्रोम में ठीक काम करता था लेकिन फ़ैंटॉमजेएस नहीं। मुझे अभी भी पता नहीं है क्यों।

+0

मुझे फ़ैंटॉमजेएस के साथ समान समस्याएं हैं। अधिकांश समय सभी परीक्षण पास होते हैं, लेकिन दूसरी बार वे सभी एक ही त्रुटि के साथ असफल होते हैं "TypeError: अपरिभाषित एक कन्स्ट्रक्टर नहीं है (मूल्यांकन ..."। केवल विंडोज पर फैंटॉमजेएस के साथ होता है। क्रोम का उपयोग त्रुटियों को कभी नहीं होता है। –

4

मेरे मामले में: चक्रीय निर्भरता के कारण:

PhantomJS 2.1.1 (Windows 8 0.0.0) ERROR TypeError: undefined is not a constructor (evaluating '(0, _actions.prefix)('SET_USER_INPUT_PHONE_NUMBER')') at undefined:12

के बाद मैं अपने जावास्क्रिप्ट उत्पादन कोड (ES6 वाक्य रचना के साथ कोलाहल/webpack संकलित) में आयात जोड़ा मैं एक ही त्रुटि मिली। परिवर्तन ठीक थे जब अनुप्रयोग का उत्पादन निर्माण क्रोम में लोड किया गया था लेकिन phantomJS के साथ परीक्षण चलाने से त्रुटि उत्पन्न हुई। मेरे मामले में अतिरिक्त आयात ने चक्रीय निर्भरताएं बनाईं।

मैं इसे भविष्य के संदर्भ के लिए यहां छोड़ रहा हूं (कुछ हफ्ते पहले मैं उसी समस्या पर ठोकर खा रहा था और कुछ हफ्तों में फिर से अपने सिर को खरोंच नहीं करना चाहता) और अन्य लोगों के लिए जो एक ही त्रुटि को गुगलते हैं।

+0

मैं ' मुझे यह त्रुटि मिल रही है जब यूनिट परीक्षण चल रहा है और संदेह है कि यह परिपत्र पर परिपत्र मॉड्यूल निर्भरता भी है। पोस्ट के लिए धन्यवाद। –

+0

आपका स्वागत है। मुझे खुशी है कि यह दूसरों के लिए भी मदद की है, न केवल मेरे लिए। – Martin

2

मुझे includes() विधि का उपयोग कर TypeError: undefined is not a constructor त्रुटि मिल रही थी। EC12AScript 2015 में includes() और endsWith() विधियां नई हैं, और इंटरनेट एक्सप्लोरर में समर्थित नहीं हैं, और स्पष्ट रूप से फ़ैंटॉमजेएस द्वारा नहीं।

एक ऐसा मौका है कि आपका अंतिम उपयोगकर्ता इंटरनेट एक्सप्लोरर का उपयोग कर रहा हो। जो मामले में, आप includes() या endsWith()

उदाहरण के लिए के बजाय पूरी तरह से समर्थित indexOf() विधि का उपयोग कर सकते हैं, मेरे मामले में, सब कुछ महान क्रोम में काम किया, लेकिन मेरे परीक्षण लाइन पर नाकाम रहने गया:

if (item.name.includes('contents'))

मैं बजाय indexOf() विधि का उपयोग कर के लिए बदल दिया:

if (item.name.indexOf('contents') !== -1)

और फिर मैं लंबे समय तक हो रही है नहीं था TypeError: undefined is not a constructor त्रुटि

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