Rumah > Artikel > hujung hadapan web > Mengapakah Mocha's expect.to.throw Gagal Menangkap Ralat Saya yang Dijangka?
Masalah dengan jangkaan Mocha untuk membuang Ralat yang Hilang Dibuang
Apabila menggunakan expect.to.throw Chai untuk menguji pengecualian dalam Nod anda .js, anda mungkin menghadapi hasil yang tidak dijangka. Jika ujian gagal disebabkan ralat yang tidak ditangkap, tetapi membungkus ujian dalam percubaan...tangkap dan menegaskan ralat yang ditangkap berjaya, anda mungkin mempersoalkan fungsi expect.to.throw.
Inti isu terletak pada cara yang diharapkan.to.throw beroperasi. Untuk menguji kemunculan pengecualian secara berkesan, ia memerlukan fungsi sebagai input. Dengan menghantar fungsi untuk dijangkakan, ia boleh menggunakan fungsi itu dan mengesahkan jika pengecualian dinaikkan.
Dalam coretan kod yang disediakan, anda terus menghantar hasil model.get('z') untuk dijangkakan . Walau bagaimanapun, pendekatan ini melepasi nilai pulangan fungsi dan bukannya fungsi itu sendiri. Untuk membetulkannya, anda perlu membekalkan expect dengan fungsi yang melaksanakan model.get apabila dipanggil.
Kod Kemas Kini:
expect(model.get.bind(model, 'z')).to.throw('Property does not exist in model schema.'); expect(model.get.bind(model, 'z')).to.throw(new Error('Property does not exist in model schema.'));
Dengan menggunakan kaedah bind, fungsi baru dicipta. Apabila dipanggil, ia memanggil model.get dengan argumen yang ditentukan, dengan itu mensimulasikan pelaksanaan model.get('z'). Ini membolehkan expect.to.throw menilai sama ada pengecualian dilemparkan semasa pelaksanaan fungsi.
Atas ialah kandungan terperinci Mengapakah Mocha's expect.to.throw Gagal Menangkap Ralat Saya yang Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!