kesalahan pengujian unit sudut 4 `TypeError: ctor bukan konstruktor`


90

Saya mencoba untuk menguji pemecah rute saya dan saat pengujian saya dapatkan TypeError: ctor is not a constructordan tidak tahu mengapa itu terjadi sementara waktu kompilasi skrip tidak ada kesalahan.

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)

apakah Anda menggunakan ng2 bootstrap
Sibiraj

Iya. tapi saya sedang menguji pemecah rute. apakah itu mempengaruhi penyelesai rute saya bahkan tidak ada html atau css
Aniruddha Das

Jawaban:


270

Ini bisa menjadi kesalahan dalam deklarasi penyedia.

Ketika Anda mencoba untuk mengejek penyedia dan menggunakan useClass daripada useValue, kesalahan "TypeError: ctor bukan konstruktor" dipicu.

Berikut adalah contoh yang mengaktifkan kesalahan:

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

Pernyataan yang benar adalah:

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

4
Anda menyelamatkan hari saya
Rashmi Kumari

2
Oh terima kasih, saya akan melihat ini terlalu lama sebelum saya melihatnya.
Michael Guthrie

1
Nah, apa yang kamu tahu. Bukan pertama kali saya melakukan kesalahan ini. Sudah memberi suara positif untuk jawabannya!
Kildareflare

Saya mendapatkan kesalahan ini saat melakukan { provide: httpTestingControllerToken, useClass: HttpTestingController },, di mana saya menyatakan const httpTestingControllerToken = new InjectionToken<HttpTestingController>('httpTestingControllerToken');... ini adalah saat mencoba mengganti yang usang TestBed.get. Ada ide?
lealceldeiro

2

Saya mendapat pesan yang sama persis saat membangun aplikasi saya dengan AOT.

Masalah saya tidak terkait dengan penyedia seperti yang disarankan @abahet.

Itu karena saya menyiapkan perpustakaan baru yang tidak sesuai dengan AOT (dan juga tidak memiliki penyedia). Pustaka yang dimaksud harus mengekspor (saya berbicara tentang ekspor Typecript, bukan yang dari modul Angular) apa yang diimpor dalam modul (dalam hal ini, komponen dan pipa).


2

Saya mengalami masalah ini dengan Angular Universal yang dikombinasikan dengan Firebase dalam proyek Firebase Universal Starter. Saya hampir kehilangan harapan karena semua potensi perbaikan pada stack overflow tidak membantu. Jadi saya melakukan yang berikut:

  1. Perbarui semua paket npm dengan https://www.npmjs.com/package/npm-check-updates
  2. Hapus node_modules dan .package-lock.json dan instal ulang
  3. Memperbaiki semua kesalahan karena perubahan api
  4. Sekarang berhasil :-)

Saya tidak pernah menemukan paket apa yang menyebabkan kesalahan, tetapi satu pendekatan untuk mengetahuinya adalah dengan membuat MockAppModule tempat Anda menghapus modul satu per satu. Akhirnya Anda akan menemukan orang yang bermasalah. Tetapi dalam kasus saya, saya beruntung, saya kira karena salah satu paket yang disadap diperbarui atau sesuatu.


1

Kemungkinan ketiga bagi Anda, saya memiliki modul yang berisi modul lain dan tidak mengekspor (berbicara ketikan) modul lainnya.


1

Saya juga mengalami masalah ini dengan AOT diaktifkan. Saya menambahkan file layanan baru. Saya memulai ulang kompiler dan masalah teratasi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.