Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa Penegasan Mocha/Chai Saya `menjangka.membuang` Gagal Mendapat Ralat yang Dilemparkan?

Mengapa Penegasan Mocha/Chai Saya `menjangka.membuang` Gagal Mendapat Ralat yang Dilemparkan?

DDD
DDDasal
2024-11-18 03:02:02417semak imbas

Why Does My Mocha/Chai `expect.to.throw` Assertion Fail to Catch Thrown Errors?

Mocha/Chai expect.to.throw Puzzle: Catching Thrown Errors

Chai expect.to.throw Penegasan nampaknya sukar difahami dalam menangkap kesilapan yang dilemparkan dengan betul. Walaupun menulis kes ujian, dakwaan dengan expect.to.throw berulang kali gagal.

Untuk menjelaskan, mari kita pertimbangkan coretan kod berikut:

it('should throw an error if you try to get an undefined property', function (done) {
  var params = { a: 'test', b: 'test', c: 'test' };
  var model = new TestModel(MOCK_REQUEST, params);

  expect(model.get('z')).to.throw('Property does not exist in model schema.');
  expect(model.get('z')).to.throw(new Error('Property does not exist in model schema.'));
});

Nampaknya, intipati Isu terletak pada cara kita menyampaikan ungkapan yang diharapkan.untuk.buang.

Penyelesaian: Membungkus Fungsi

Untuk membetulkan masalah ini, kita perlu lulus fungsi untuk expect.to.throw, yang kemudiannya akan digunakan. Kod pelarasan berikut kini akan berfungsi seperti yang dimaksudkan:

it('should throw an error if you try to get an undefined property', function (done) {
  var params = { a: 'test', b: 'test', c: 'test' };
  var model = new TestModel(MOCK_REQUEST, params);

  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, kami mencipta fungsi baharu yang, apabila dipanggil, akan membangkitkan model.get dengan set ini kepada model dan set hujah awal kepada 'z'.

Penjelasan Pengikatan

Dalam konteks ini, bind memainkan peranan yang penting. Ia menjana fungsi baharu yang menerima hujah yang sama seperti yang asal tetapi dengan nilai khusus untuk ini apabila dipanggil. Dalam kes kita, nilai ini ialah model dan hujahnya ialah 'z'.

Apabila kita lulus hasil model.get('z') to expect.to.throw, kita pada dasarnya melepasi yang dilemparkan kesilapan terhadap penegasan. Walau bagaimanapun, tujuan expect.to.throw adalah untuk menyemak sama ada pengecualian dilemparkan oleh fungsi tertentu apabila dipanggil. Oleh itu, kita mesti lulus fungsi itu sendiri dan bukannya hasilnya. Kaedah bind membolehkan kami melakukan perkara itu.

Untuk menyelam lebih mendalam, rujuk pautan yang disediakan.

Atas ialah kandungan terperinci Mengapa Penegasan Mocha/Chai Saya `menjangka.membuang` Gagal Mendapat Ralat yang Dilemparkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn