कोणीय 4 इकाई परीक्षण त्रुटि `टाइपError: ctor एक constructor` नहीं है


90

मैं अपने मार्ग रिज़ॉल्वर का परीक्षण करने की कोशिश कर रहा हूं और मुझे परीक्षण करते समय TypeError: ctor is not a constructorऔर पता नहीं क्यों टाइपस्क्रिप्ट संकलन समय में कोई त्रुटि नहीं है।

TypeError: ctor is not a constructor
TypeError: ctor is not a constructor
    at _createClass (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42355:26)
    at _createProviderInstance$1 (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42330:26)
    at resolveNgModuleDep (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42315:17)
    at _createClass (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42362:26)
    at _createProviderInstance$1 (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42330:26)
    at resolveNgModuleDep (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42315:17)
    at NgModuleRef_.webpackJsonp../node_modules/@angular/core/@angular/core.es5.js.NgModuleRef_.get (http://localhost:9877/_karma_webpack_/vendor.bundle.js:43401:16)
    at TestBed.webpackJsonp../node_modules/@angular/core/@angular/core/testing.es5.js.TestBed.get (http://localhost:9877/_karma_webpack_/vendor.bundle.js:48412:47)
    at http://localhost:9877/_karma_webpack_/vendor.bundle.js:48418:61
    at Array.map (native)

क्या आप ng2 बूटस्ट्रैप का उपयोग कर रहे हैं
सिबिराज

हाँ। लेकिन मैं रूट रिज़ॉल्वर का परीक्षण कर रहा हूं। क्या मेरे रूट रिज़ॉल्वर को प्रभावित करना यहाँ तक कि html या सीएसएस नहीं है
अनिरुद्ध दास

जवाबों:


270

यह प्रदाताओं की घोषणाओं में त्रुटि हो सकती है।

जब आप एक प्रदाता का उपयोग करने और उपयोग करने की कोशिश करते हैं, तो इसके बजाय useClass का उपयोग करें त्रुटि के प्रकार "टाइप करें: ctor एक निर्माता नहीं है" निकाल दिया गया है।

यहाँ एक उदाहरण है जो त्रुटि को दूर करता है:

providers: [{provide: OrderService, useClass: new OrderServiceMock()}]

सही घोषणा है:

providers: [{provide: OrderService, useValue: new OrderServiceMock()}]

4
आपने मेरा दिन बचाया
रश्मि कुमारी

2
ओह, धन्यवाद, मैंने देखा है कि इससे पहले कि मैं बहुत पहले से इस तरह से घूर रहा था।
माइकल गुथरी

1
ठीक है, आप क्या जानते हो। पहली बार नहीं जब मैंने यह गलती की है। पहले से ही उत्तर उत्कीर्ण कर चुके हैं!
Kildareflare

मुझे यह त्रुटि करते हुए मिल रही है { provide: httpTestingControllerToken, useClass: HttpTestingController },, जहां मैंने घोषित किया const httpTestingControllerToken = new InjectionToken<HttpTestingController>('httpTestingControllerToken');... यह तब है जब पदावनत को बदलने की कोशिश की जा रही है TestBed.get। कोई विचार?
lealceldeiro

2

मेरे पास AOT के साथ अपना ऐप बनाते समय सटीक संदेश था।

मेरी समस्या प्रदाताओं से संबंधित नहीं थी जैसा कि @ प्रकार ने सुझाव दिया था।

ऐसा इसलिए था क्योंकि मैंने एक नया पुस्तकालय स्थापित किया था जो एओटी का अनुपालन नहीं था (और इसका कोई प्रदाता भी नहीं था)। प्रश्न में पुस्तकालय को निर्यात करना था (मैं टाइपस्क्रिप्ट निर्यात के बारे में बात कर रहा हूं, न कि कोणीय मॉड्यूल से) क्या मॉड्यूल में आयात किया गया था (इस मामले में, एक घटक और एक पाइप)।


2

मुझे यह समस्या एंगुलर यूनिवर्सल के साथ फायरबेस के यूनिवर्सल स्टार्टर प्रोजेक्ट में फायरबेस के साथ थी। स्टैक ओवरफ्लो फ्लॉप फ्लॉप पर सभी संभावित सुधारों के रूप में मुझे लगभग उम्मीद खो चुकी थी। तो मैंने निम्नलिखित कार्य किया:

  1. Https://www.npmjs.com/package/npm-check-updates के साथ सभी npm पैकेजों को अपडेट करें
  2. नोड_मॉड्यूल्स और .पैकेज-लॉक.जॉन को निकालें और उन्हें फिर से इंस्टॉल करें
  3. परिवर्तित एपीआई के कारण सभी त्रुटियों को ठीक किया
  4. अब यह काम कर रहा था :-)

मुझे यह कभी पता नहीं चला कि किस पैकेज में त्रुटि हुई, लेकिन यह पता लगाने के लिए एक दृष्टिकोण है कि एक MockAppModule बनाना है जहां आप एक-एक करके मॉड्यूल निकालते हैं। आखिरकार आप समस्या के साथ एक मिल जाएगा। लेकिन मेरे मामले में मैं भाग्यशाली था कि मुझे लगता है कि एक खराब पैकेज के कारण अपडेट हुआ या कुछ और।


1

आपके लिए तीसरी संभावना, मेरे पास एक मॉड्यूल था जिसमें अन्य मॉड्यूल थे और दूसरे मॉड्यूल को निर्यात नहीं कर रहे थे।


1

मुझे भी एओटी सक्षम के साथ यह समस्या थी। मैंने एक नई सेवा फ़ाइल जोड़ी। मैंने कंपाइलर को फिर से शुरू किया और समस्या हल हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.