Saya memiliki beberapa tes gagal yang hanya menghasilkan [object ErrorEvent] thrown
. Saya tidak melihat apa pun di konsol yang membantu saya menentukan kode yang melanggar. Apakah ada yang perlu saya lakukan untuk melacaknya?
[EDIT]: Saya menjalankan Karma v1.70, Jasmine v2.7.0
angular
angular-cli
karma-jasmine
Darrell Brogdon
sumber
sumber
[object ErrorEvent] thrown
adalah semua yang dikatakannya. Tidak ada sebelum atau sesudah.it()
kefit()
, meskipun hanya pengujian tunggal itu yang berjalan, error masih muncul. Adakah rekomendasi debug untuk jenis kesalahan ini?Jawaban:
Sebagai perbaikan cepat, Anda dapat mencoba menjalankan pengujian tanpa peta sumber :
CLI v6.0.8 dan yang lebih baru
--source-map=false
CLI v6.0.x versi awal
--sourceMap=false
CLI v1.x
--sourcemaps=false
Ada masalah terbuka tentang https://github.com/angular/angular-cli/issues/7296
UPDATE : Saya mengalami masalah itu juga, jadi saya baru saja bermigrasi ke cli terbaru dan memastikan bahwa semua paket diperbarui
package.json
juga saya menginstal ulang sepenuhnyanode_modules
jadi sekarang masalah telah hilang.sumber
--sourceMap=false
sepertinya berfungsi.Jika sourcemap = false tidak membantu, coba 1) buka browser Anda yang menjalankan pengujian 2) klik tombol debug 3) buka konsol
Kesalahannya akan ada di sana
sumber
--sourcemaps=false
hal tidak bekerja untuk saya, tapi ini bekerja dengan sempurna! Terima kasih!Coba jika Anda mendapatkan pesan kesalahan yang lebih deskriptif dengan menjalankan tes dari terminal, seperti ini:
Dalam pengujian Anda, Anda dapat mengganti
dengan
Sekarang hanya tes yang diawali dengan fit yang akan dijalankan. Untuk membiarkan browser terbuka setelah menjalankan pengujian, jalankan pengujian seperti ini:
Secara pribadi, saya mengalami kesalahan ini dua kali. Keduanya hanya dipicu saat memanggil fixture.detectChanges ().
Yang pertama kalinya, saya dipecahkan dengan menggunakan interpolasi string lebih aman dalam file html saya.
Contoh yang tidak aman :
Contoh Safe (r) (perhatikan tanda tanya):
Hal yang sama mungkin berlaku untuk pengikatan properti:
The kedua kalinya, saya menggunakan DatePipe dalam file html saya, tapi milik bohongan yang saya gunakan pada itu bukan kencan.
file .html:
File .ts (mock-data) ( salah ):
.ts (mock-data) file ( benar ):
sumber
Ini karena framework Jasmine tidak dapat menangani jenis ErrorEvent sehingga tidak mengekstrak pesan error dan memanggil
error.toString()
objek tersebut.Saya baru saja mengajukan masalah di repo jasmine https://github.com/jasmine/jasmine/issues/1594
Selama tidak diperbaiki, Anda dapat menambal paket jasmine yang terinstal untuk sementara di folder node_modules. Dalam kasus saya itu
node_modules/jasmine/node_modules/lib/jasmine-core/jasmine.js
dan kemudian ubah implementasi ExceptionFormatter dari ini
untuk ini
Ini membantu untuk mengidentifikasi masalah.
sumber
node_modules/jasmine_core/lib/jasmine_core/jasmine.js
uncaught
untuk saya yang tidak membantu. Jadi saya menambahkan kode untuk mencetakerror
objek dan propertinya.if(error){ // message+=error; for(var propName in error) { propValue = error[propName] message+='error prop: '+propName+', value: '+propValue; } }
. Ini memberikan info tambahan yang membantu saya dalam debugging - misalnyaerror prop: filename, value: blob:http://localhost:9881/11777e3a-28d8-414e-9047-cee7d328e843
Bagi saya itu terkait dengan memiliki janji yang diselesaikan di
ngOnInit
sebuah komponen. Saya harus menggunakanasync
,fakeAsync
dan mencentang serta mematikan layanan asinkron denganspyOn
Angular - Cara menguji unit komponen dengan panggilan layanan asinkron
sumber
TL; DR: Ini mungkin terkait dengan pengujian perutean.
Saya mendapatkan
[object ErrorEvent] thrown
juga. Satu jam kemudian, menelusurinya ke satu baris kode.Masalahnya terletak pada lingkungan pengujian yang mencoba mengevaluasi
this.route.snapshot.paramMap.get('id')
.Jika saya menggantinya dengan
0
,[object ErrorEvent] thrown
hilang.UserService saya memiliki pengguna seperti ini:
Jadi
0
dapatkan saja pengguna ini, di index0
.Sebaliknya saat menjalankan aplikasi saya secara normal,
this.route.snapshot.paramMap.get('id')
dievaluasi saat pengguna memilih pengguna untuk diedit dari tabel pengguna saya.Jadi di HTML saya,
*ngFor="let user of users; index as i"
loop untuk menampilkan semua penggunarouterLink="/edit/{{i}}"
sehingga Anda dapat mengklik tombol edit untuk setiap pengguna, yang ketika diklik pergi ke misalnyahttp://localhost:4200/edit/0
untuk mengedit detail pengguna admin yang disebutkan di atas.sumber
bagaimana dengan pembersihan setelah setiap kasus uji:
sumber
Saya memiliki masalah yang sama. Salah satu cara kesalahan ini terjadi adalah ketika Anda mencoba mengakses apa pun yang null atau tidak ditentukan dalam template. Pastikan Anda memiliki pemeriksaan keamanan pada variabel tersebut.
Misalnya, ini akan menampilkan [object: ErrorEvent] ketika config tidak ditentukan pada pemuatan komponen.
template.html
Lakukan ini sebagai gantinya
sumber
Apa yang dapat membantu adalah, jika Anda membuka jendela Chrome untuk runner pengujian Karma Anda, untuk membuka alat pengembang dan memeriksa konsol di sana. Bagi saya, ini membantu saya mengetahui bahwa aplikasi tidak dapat menggunakan metode Array.findIndex pada array yang tidak ditentukan (karena struktur data diatur oleh string tanggal, seperti data [2018] [3] [28], dan Saya kebetulan menunjuk ke tanggal yang salah), tetapi alih-alih hanya berhenti di kesalahan, pengujian terus berjalan.
sumber
Bagi saya masalahnya adalah saya menjalani tes di mana saya secara tidak sengaja menggunakan perpustakaan auth0-lock .
sumber
Tampaknya ini merupakan masalah asinkron, karena setelah saya menambahkan cukup banyak
it
di salah satu spesifikasi komponen saya, saya bisa mendapatkan pesan kesalahan yang dapat digunakan yang menunjuk ke file dan baris di dalam file itu (terkait denganparamMap
.Di spesifikasi yang menguji ParamMap, saya baru saja menambahkan:
sumber
Anda mungkin memiliki balapan atau pengujian asinkron yang tidak disiapkan dengan benar atau digunakan secara tidak benar. Saya akan berasumsi bahwa kasus debug perlu diperbaiki dan mengabaikan bahwa baris perintah lewat. Cukup terus menyegarkan runner pengujian karma (browser) jika kesalahan
[object ErrorEvent] thrown
muncul sesekali, lalu pastikan Anda telah menerapkan kondisi asinkron dengan benar.Semoga berhasil.
sumber
Kesalahan ini menunjukkan bahwa Anda memiliki sesuatu yang tidak ditentukan. Cara termudah untuk men-debugnya dari pengalaman saya adalah:
sumber
[object ErrorEvent] thrown
ke metode yang hilang dari jarak jauh itu hanya berkat console.log :)Dalam kasus saya, masalahnya ada pada layanan, karena salah satu objek tidak akan ditentukan selama pengujian berjalan.
Contoh kode layanan adalah seperti di bawah ini akses ke dom,
Spesifikasi yang merujuk ke layanan ini gagal dengan kesalahan ' [objek ErrorEvent] dilempar '.
Saya mengejek objek layanan saya di dalam semua spesifikasi yang mengacu pada ini dan masalah terselesaikan.
Layanan tiruan
Dan gunakan objek layanan tiruan ini di penyedia seperti di bawah ini,
sumber
Saya menggunakan proxy di aplikasi saya yang ditentukan di proxy.conf.json seperti:
Karena Karma tidak mengetahui proxy ini, Karma terus membuat kesalahan di konsol sehingga titik akhir API tidak dapat ditemukan. Jadi setelah melihat dokumentasi Karma, saya menemukan bahwa yang dapat saya lakukan adalah menambahkan properti "proxy" di karma.conf.js dengan objek yang sama dari proxy.conf.json:
Error di konsol telah hilang, dan [object errorEvent] tidak lagi ditampilkan.
sumber
Pada akhirnya, apa yang berhasil untuk saya:
sumber