Rumah > hujung hadapan web > tutorial js > Cara Menguji Kod Asynchronous dengan QUnit

Cara Menguji Kod Asynchronous dengan QUnit

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-02-21 09:50:15
asal
787 orang telah melayarinya

How to Test Asynchronous Code with QUnit

mata utama

    fungsi async, seperti fungsi segerak, juga memerlukan ujian. QUnit menyediakan kaedah,
  • , khusus untuk menguji kod tak segerak. QUnit.asyncTest()
  • perlu digunakan dalam kombinasi dengan dua kaedah lain: QUnit.asyncTest() dan QUnit.start(). QUnit.stop() digunakan untuk memulakan atau menyambung semula ujian selepas ujian dihentikan, manakala QUnit.start() meningkatkan bilangan QUnit.stop() panggilan bahawa pelari ujian mesti menunggu sebelum meneruskan. QUnit.start()
  • Tutorial ini menyediakan contoh cara menggunakan kaedah ini dalam amalan. Ia menunjukkan cara menggunakan
  • , QUnit.start() dan QUnit.stop() untuk menguji fungsi yang mengira nilai maksimum satu set parameter secara asynchronously. QUnit.asyncTest()
  • Tutorial ini juga mengesyorkan bahawa apabila menguji kod asynchronous untuk operasi Ajax, adalah yang terbaik untuk tidak bergantung pada data atau hasil sebenar yang dikembalikan oleh pelayan, kerana pelayan mungkin mempunyai kesilapan yang berpotensi. Sebaliknya, ia mengesyorkan menggunakan perpustakaan seperti JQuery Mockjax atau Sinon.js untuk mensimulasikan permintaan Ajax.
Beberapa minggu yang lalu, saya menerbitkan sebuah artikel bertajuk Bermula dengan Qunit, membincangkan konsep utama ujian unit dan bagaimana untuk menguji kod JavaScript menggunakan QUNIT. Dalam jawatan itu, saya memberi tumpuan kepada pernyataan yang disediakan oleh rangka kerja dan bagaimana untuk menguji kod berjalan serentak. Walau bagaimanapun, jika kita ingin membincangkan kes-kes kehidupan sebenar, kita tidak dapat mengelakkan bercakap tentang fungsi tidak segerak. Sama seperti fungsi segerak, fungsi tak segerak memerlukan perhatian dan lebih banyak ujian. Dalam siaran ini, saya akan mengajar anda bagaimana untuk menguji kod tak segerak menggunakan QUNIT. Jika anda tidak ingat kaedah penegasan yang ada, atau anda telah terlepas artikel saya sepenuhnya, saya cadangkan anda membaca bermula dengan Qunit. Bahan -bahan yang diliputi dalam artikel ini akan menjadi prasyarat untuk artikel ini.

3

Setiap projek bukan remeh yang ditulis dalam JavaScript mengandungi fungsi tak segerak. Mereka digunakan untuk melakukan operasi yang diberikan selepas masa tertentu, mengambil data dari pelayan, dan juga menghantar data ke pelayan. QUnit menyediakan kaedah yang dipanggil

yang bertujuan untuk menguji kod tak segerak. Tandatangan kaedah ini adalah seperti berikut: Parameter

mempunyai makna yang sama seperti

, tetapi untuk kemudahan, saya melaporkannya di sini: QUnit.asyncTest()

  • name: Rentetan yang membantu kita mengenal pasti ujian yang dibuat.
  • testFunction: Fungsi yang mengandungi pernyataan bahawa rangka kerja akan dilaksanakan. Rangka kerja ini melepasi parameter ke fungsi ini yang mendedahkan semua kaedah penegasan Qunit.
Hakikat bahawa kaedah ini menerima parameter yang sama seperti

boleh mengelirukan. Anda mungkin berfikir prinsipnya adalah sama, dan semua yang anda perlu lakukan untuk menguji fungsi tidak segerak adalah untuk menggantikan panggilan ke QUnit.test() dengan QUnit.asyncTest() dan ia dilakukan. Tidak begitu cepat! Untuk mencapai karyanya, QUnit.test() perlu digunakan dalam kombinasi dengan dua kaedah lain: QUnit.asyncTest() dan QUnit.start(). Mari kita ketahui lebih lanjut mengenai mereka. QUnit.stop()

dan QUnit.start() QUnit.stop()

Apabila QUnit melaksanakan ujian yang dibuat menggunakan

, ia secara automatik menghentikan program ujian ujian. Ia kemudian akan menunggu panggilan fungsi yang mengandungi pernyataan QUnit.asyncTest(). Tujuan QUnit.start() adalah untuk memulakan atau meneruskan ujian berjalan selepas ujian dihentikan. Kaedah ini menerima integer sebagai satu -satunya parameter pilihan QUnit.start() untuk menggabungkan pelbagai panggilan ke dalam satu QUnit.start(). Ujian boleh dihentikan menggunakan kaedah . QUnit.stop() Ia meningkatkan bilangan panggilan bahawa pelari ujian mesti menunggu sebelum meneruskan. Kaedah ini menerima integer sebagai satu -satunya parameter pilihan yang menentukan bilangan panggilan tambahan kepada QUnit.start() bahawa rangka kerja mesti menunggu. Nilai lalai ialah 1. Agak sukar difahami, bukan? Definisi kaedah yang melibatkan kaedah yang sepadannya seperti kekacauan. Malangnya, itulah yang mereka lakukan. Cara terbaik yang saya tahu untuk menjelaskan konsep -konsep ini adalah untuk memberi anda contoh penggunaan tertentu. QUnit.start()

Mengintegrasikan semua Kandungan

Dalam bahagian ini, kami akan meletakkan pendekatan yang dibincangkan setakat ini. Mudah -mudahan apabila anda membacanya, anda akan mendapat pemahaman yang lebih mendalam tentang mekanisme ini. Mari kita mulakan dengan contoh mudah menggunakan salah satu fungsi yang dibangunkan dalam artikel yang bermula dengan Qunit:

. Fungsi ini mengambil bilangan parameter dan mengembalikan nilai maksimum. Kod fungsi ini adalah seperti berikut:

max()

Sekarang, katakan fungsi ini biasanya akan dijalankan pada set parameter yang sangat besar. Kami mahu mengelakkan penyemak imbas pengguna disekat sehingga hasilnya dikira. Untuk melakukan ini, kami akan meletakkan panggilan
QUnit.asyncTest(name, testFunction)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
dengan nilai kelewatan 0 dalam panggilan balik yang diluluskan kepada

. Kod yang digunakan untuk fungsi ujian asynchronous (ia harus membuat anda merasakan penggunaan max()) adalah seperti berikut: window.setTimeout()

QUnit.asyncTest(name, testFunction)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam kod di atas, saya telah membungkus panggilan ke fungsi max() sebagai panggilan balik window.setTimeout(). Selepas melaksanakan pernyataan dengan max(), kami memanggil kaedah QUnit.start() untuk membolehkan pelari ujian untuk meneruskan pelaksanaannya. Jika kita mengelakkan memanggil kaedah ini, pelari ujian akan terjebak dan ujian kami akan gagal dengan teruk (sebenarnya ujian itu dijeda dan tidak melakukan apa -apa lagi, jadi ia bukan kegagalan penegasan sebenar). Contoh sebelumnya harus mudah difahami, kerana ia sangat serupa dengan rakan sejawatnya yang segerak. Walau bagaimanapun, ujian untuk satu situasi sahaja tidak meyakinkan kami tentang kod kami. Di samping itu, kami tidak mempunyai peluang untuk melihat aplikasi praktikal QUnit.stop(). Untuk menyelesaikan masalah ini, kami akan melaksanakan semua pernyataan yang kami lihat dalam jawatan terdahulu ke dalam fungsi yang diluluskan kepada QUnit.asyncTest(). Kod lengkap kelihatan seperti ini:

function max() {
   var max = -Infinity;
   for (var i = 0; i < arguments.length; i++) {
      if (arguments[i] > max) {
         max = arguments[i];
      }
   }

   return max;
}
Salin selepas log masuk

Dalam ujian, kami menetapkan bilangan pernyataan yang kami harapkan untuk dijalankan, seperti yang dibincangkan dalam memulakan dengan Qunit. Fungsi itu kemudian memanggil kaedah QUnit.stop(). Ini adalah perlu kerana dalam ujian kami melakukan empat panggilan tak segerak. Apabila kita menggunakan QUnit.asyncTest(), rangka kerja hanya menunggu panggilan QUnit.start(). Jika kita menghilangkan panggilan QUnit.stop() dan menentukan tiga lagi panggilan kepada QUnit.start(), ujian akan gagal kerana bilangan dakwaan yang dijangkakan adalah berbeza daripada bilangan pernyataan yang dilaksanakan. Demonstrasi langsung kod yang merangkumi panggilan ke expect() ditunjukkan di bawah dan disediakan sebagai JSBIN.

ujian asynchronous menggunakan qunit

Dalam bahagian ini, kita telah melihat contoh kod asynchronous yang tidak melaksanakan operasi AJAX. Walau bagaimanapun, anda biasanya mahu memuatkan data dari atau menghantar data ke pelayan. Apabila ini berlaku, lebih baik tidak bergantung pada data atau hasil sebenar yang dikembalikan oleh pelayan, kerana ia mungkin mempunyai kesilapan (anda tahu, tiada apa -apa dalam perisian yang sempurna). Untuk mengelakkan masalah ini, anda harus mensimulasikan permintaan AJAX. Untuk melakukan ini, anda boleh menggunakan jQuery mockjax, sinon.js, atau mana -mana perpustakaan lain yang sesuai dengan keperluan anda.

Kesimpulan

Dalam tutorial ini, anda telah belajar bagaimana untuk membuat ujian untuk fungsi asynchronous. Pertama, kita membincangkan cara mengisytiharkan ujian yang melibatkan kod tak segerak menggunakan kaedah QUnit.asyncTest(). Kemudian anda memahami kewujudan dua kaedah lain QUnit.start() dan QUnit.stop(), yang harus digunakan semasa membuat ujian menggunakan QUnit.asyncTest(). Akhirnya, kami meletakkan pengetahuan yang diperolehi dalam amalan dengan membangunkan dua ujian untuk menunjukkan bagaimana kaedah ini berfungsi bersama -sama. Menggunakan topik yang diliputi dalam tutorial ini, anda mempunyai semua keupayaan yang anda perlukan untuk menguji sebarang kod yang mungkin anda tulis dalam JavaScript. Saya ingin tahu apa yang anda fikirkan rangka kerja ini dan sama ada anda akan mempertimbangkan menggunakannya dalam projek anda.

FAQs (FAQ) pada ujian kod asynchronous dengan qunit

Apakah kod asynchronous dan mengapa penting untuk mengujinya?

Kod Async merujuk kepada operasi yang boleh dimulakan, dijalankan dan disiapkan dalam tempoh masa yang bertindih. Ini adalah cara pengaturcaraan yang membolehkan pelbagai perkara berlaku pada masa yang sama. Ini amat berguna dalam aplikasi yang memerlukan banyak operasi I/O atau memerlukan tugas seperti mendapatkan data dari pelayan. Menguji kod asynchronous adalah penting kerana ia membantu memastikan semua bahagian kod dilaksanakan dengan betul, walaupun mereka berjalan serentak. Ia membantu mengenal pasti sebarang masalah yang mungkin disebabkan oleh pelaksanaan pelaksanaan bahagian kod yang berlainan.

Bagaimana QUnit membantu menguji kod tak segerak?

Qunit adalah rangka kerja ujian unit JavaScript yang kuat dan mudah digunakan. Ia dapat menguji mana -mana kod JavaScript biasa, termasuk kod asynchronous. QUnit menyediakan fungsi utiliti "async" yang menjadikan pengujian kod asynchronous mudah. Fungsi ini menjeda program ujian ujian dan mengembalikannya selepas kod tak segerak dilaksanakan. Ini memastikan bahawa ujian anda dengan tepat mencerminkan tingkah laku kod tak segerak.

Bagaimana menggunakan fungsi "async" di Qunit untuk menguji kod tak segerak?

Gunakan fungsi "Async" di Qunit dengan memanggilnya dalam fungsi ujian. Ini akan mengembalikan fungsi panggil balik, yang harus anda panggil selepas operasi tak segerak selesai. Berikut adalah contoh asas:

QUnit.asyncTest(name, testFunction)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh ini, fungsi "Async" digunakan untuk menjeda program ujian sehingga panggilan balik "selesai" dipanggil.

... (Soalan dan jawapan Soalan Lazim yang tersisa boleh ditulis semula sama dengan teks asal untuk memastikan kandungannya konsisten, tetapi struktur ayat dan penggunaan kata telah berubah untuk mengelakkan menyalin sepenuhnya.)

Atas ialah kandungan terperinci Cara Menguji Kod Asynchronous dengan QUnit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan