Saya mencoba menguji komponen 4.1.0 sudut saya -
export class CellComponent implements OnInit {
lines: Observable<Array<ILine>>;
@Input() dep: string;
@Input() embedded: boolean;
@Input() dashboard: boolean;
constructor(
public dataService: CellService,
private route: ActivatedRoute,
private router: Router, private store: Store<AppStore>) {
}
}
Namun, tes "seharusnya membuat" yang sederhana melempar kesalahan samar ini ...
NetworkError: Gagal menjalankan 'kirim' pada 'XMLHttpRequest': Gagal memuat 'ng: ///DynamicTestModule/module.ngfactory.js'.
jadi saya menemukan pertanyaan ini , yang menunjukkan bahwa masalah adalah komponen memiliki @Input)_
params yang tidak diatur, namun, jika saya memodifikasi pengujian saya seperti:
it('should create', inject([CellComponent], (cmp: CellComponent) => {
cmp.dep = '';
cmp.embedded = false;
cmp.dashboard = false;
expect(cmp).toBeTruthy();
}));
maka saya masih mendapatkan masalah yang sama, sama halnya, jika saya menghapus @Input()
anotasi dari komponen, masih tidak ada perbedaan. Bagaimana saya bisa lulus tes ini?
angular
unit-testing
karma-jasmine
angular-cli
George Edwards
sumber
sumber
Jawaban:
Ini adalah masalah dari Angular Cli baru. Jalankan pengujian Anda dengan
--sourcemaps=false
dan Anda akan mendapatkan pesan kesalahan yang tepat.Lihat detailnya di sini: https://github.com/angular/angular-cli/issues/7296
EDIT:
Singkatan untuk ini adalah:
ng test -sm=false
Pada sudut 6 perintahnya adalah:
ng test --source-map=false
sumber
Saya memiliki masalah yang sama menggunakan angualar cli 6, saya telah menggunakan tag ini untuk mendapatkan pesan kesalahan yang benar:
Mungkin itu akan membantu seseorang :).
sumber
Untuk kasus saya ada masalah data mock dan dalam kasus
Array
, saya kembalistring
dari mock.Banyak kali itu terjadi ketika Anda mengejek data tidak lengkap atau salah.
sumber
Anda dapat mengatur properti input () ke nilai default di component.ts
ATAU
Ubah file component.spec.ts Anda dengan cara berikut,
sumber
Seperti yang disarankan di atas di sini: https://stackoverflow.com/a/45570571/7085047 masalah saya ada di saya
ngOnInit
. Saya sedang memanggil proxy pengendali REST tiruan yang dibuat-buat tiruan. Itu mengembalikan nol, dan saya berlangganan ke nol itu, yang tidak berfungsi ...Kesalahan kembali:
Failed to load ng:///DynamicTestModule/MockNodeDashboardComponent_Host.ngfactory.js: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
Saya memperbaiki masalah menggunakan ts-mockito: https://github.com/NagRock/ts-mockito
Saya menambahkan kode untuk membuat contoh tiruan seperti ini:
Dan kemudian menambahkan instance ke array penyedia tes seperti ini:
sumber
Ini dapat dikaitkan dengan Chrome yang menyembunyikan kesalahan pengujian yang sebenarnya. Area pengujian akan membingungkan beberapa pabrik tiruan http yang tidak dapat dimuat dan karenanya itu adalah kesalahan yang akan dilaporkan. Kemungkinan besar kesalahannya adalah di sekitar area ngOnInit di mana suatu objek, katakanlah, mengharapkan sub objek dan mereka tidak didefinisikan.
Untuk mencoba dan sampai ke bagian bawah kesalahan, beralih ke PhantomJS sementara yang tampaknya kurang menderita dari kesalahan inisialisasi ini dan ini diharapkan akan melaporkan kesalahan yang sebenarnya kepada Anda. Beberapa kali saya temukan di mana objek yang diharapkan pada inisialisasi tidak lengkap. YAITU:
Mengoreksi objek memungkinkan PhantomJS untuk menyelesaikan dan juga Chrome untuk melanjutkan ke pengujian berikutnya.
Selain itu saya belum melihat solusi untuk menghapus masalah dari Chrome. Seperti yang pernah dicoba dan mengadopsi kebijakan "hapus kode, sampai kesalahan" untuk mengejar kesalahan.
UPDATE: Perhatikan ini sekarang jawaban yang cukup lama, saya tidak akan merekomendasikan menggunakan PhantomJS lagi (EOL). Pelaporan pengujian browser telah menjadi jauh lebih baik dan jika Chrome memberi Anda kesedihan maka cobalah Firefox, yang juga menjalankan tes dengan sangat baik saat ini.
sumber
Saya juga memiliki kesalahan ini, yang mana kebenarannya dikatakan tidak banyak bicara.
Itu terkait dengan panggilan HTTP melalui layanan saya
Saya menggunakan myService.ts dengan 2 metode
Saya mengejek layanan ini: mockMyService.ts
Kesalahan ada di sini karena komponen saya menggunakan metode getAll () yang saya lupa implementasikan di mockMyService, jadi saya baru saja menambahkan metode:
Kesalahan hilang :)
sumber
Saya menghadapi masalah yang sama dan saya menemukan bahwa untuk memperbaikinya Anda harus mengatur input Anda untuk komponen dalam metode sebelumEach seperti yang ditunjukkan di bawah ini:
Ini pasti akan menyelesaikan masalah Anda.
sumber
Dalam kasus saya pelakunya
observable.timeout(x).retry(y)
diterapkan di suatu tempat di Observable kembali pada tingkat kelas layanan, sekali lagi dalam komponen yang menggunakan layanan itu.Semuanya berfungsi dengan benar di browser hingga angular-cli 1.4. Kemudian mulai gagal selama tes Karma (dengan kesalahan konyol). Solusinya tentu saja untuk merapikan batas waktu / coba lagi operator ini.
sumber
Bagi saya pesan ini muncul ketika mock palsu dalam pengujian saya: biasanya Anda memberikan mockService di bootstrap tes Anda. Jika tiruan Anda tidak lengkap atau palsu, maka angular mengembalikan kesalahan bodoh ini.
Informasi lebih lanjut tentang kasus saya di sini
sumber
Apa yang akan saya lakukan adalah:
Tambahkan console.log () s, baris demi baris di ngOnint () dan cari tahu seberapa jauh, kemudian periksa baris yang tidak akan dilewatinya.
Ex:
Ini gagal pada pengujian saya dengan kesalahan yang sama dalam posting ini. Seperti yang ditunjukkan di atas, saya punya dua console.logs. Yang pertama lulus, tapi yang kedua tidak. Jadi saya menyadari masalahnya ada pada baris const id = params.get ('id'); dan saya memperbaikinya.
Semoga ini bisa membantu seseorang.
sumber