Ujian Unit JavaScript anda menggunakan mocha dan chai
di bawah:
<!-- load your test files here -->
Sebaik sahaja anda telah menambah skrip, anda boleh memuatkan halaman Runner Ujian dalam penyemak imbas pilihan anda.
Hasil ujian
Apabila anda menjalankan ujian anda, hasil ujian akan kelihatan seperti ini:
mari kita lihat bagaimana ujian gagal.
pada baris dalam ujian yang mengatakan:
assert.equal(arr.length, 0);
Jika anda menjalankan ujian lagi, anda akan melihat ujian gagal dengan warna merah dengan perihalan apa yang salah.
Salah satu manfaat ujian ialah mereka membantu anda mencari pepijat lebih cepat, namun kesilapan ini tidak begitu membantu dalam hal itu. Kita boleh memperbaikinya.
Kebanyakan fungsi penegasan juga boleh mengambil parameter mesej pilihan. Ini adalah mesej yang dipaparkan apabila penegasan gagal. Adalah idea yang baik untuk menggunakan parameter ini untuk membuat mesej ralat lebih mudah difahami.
kita boleh menambah mesej kepada pernyataan kita seperti:
Jika anda menjalankan semula ujian, mesej tersuai akan muncul dan bukannya lalai.
assert.equal(arr.length, 1, 'Array length was not 0');
mari kita menukar pernyataan kembali ke arahnya - ganti 1 dengan 0, dan jalankan ujian sekali lagi untuk memastikan mereka lulus.
meletakkannya bersama
Setakat ini kami telah melihat contoh yang agak mudah. Mari kita letakkan apa yang telah kita pelajari dan lihat bagaimana kita akan menguji sekeping kod yang lebih realistik.
Berikut adalah fungsi yang menambah kelas CSS ke elemen. Ini harus masuk dalam fail baru js/classname.js.
3
Dalam kes yang terbaik, kami akan menulis ujian untuk fungsi inifunction addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
kami menulis kod tersebut. Tetapi pembangunan yang didorong oleh ujian adalah topik yang kompleks, dan sekarang kita hanya ingin memberi tumpuan kepada ujian menulis.
Untuk memulakan, mari kita ingat idea asas di sebalik ujian unit: kami memberikan fungsi input tertentu dan kemudian sahkan fungsi berkelakuan seperti yang diharapkan. Jadi apakah input dan tingkah laku untuk fungsi ini? diberi elemen dan nama kelas:
- Jika harta kelas unsur tidak mengandungi nama kelas, ia harus ditambah.
- Jika harta kelas elemen tidak mengandungi nama kelas, ia tidak boleh ditambah.
Mari menterjemahkan kes -kes ini ke dalam dua ujian. Dalam direktori ujian, buat fail baru classnametest.js dan tambahkan yang berikut:
<!-- load your test files here -->
Kami menukar kata -kata sedikit ke bentuk "ia harus lakukan x" yang digunakan dengan ujian. Ini bermakna ia membaca sedikit lebih baik, tetapi pada dasarnya masih bentuk yang boleh dibaca manusia yang sama yang kita disenaraikan di atas. Ia biasanya tidak lebih sukar daripada ini untuk pergi dari idea untuk menguji.
Tetapi tunggu, di manakah fungsi ujian? Nah, apabila kita menghilangkan parameter kedua kepadanya, Mocha menandakan ujian ini sebagai menunggu dalam keputusan ujian. Ini adalah cara yang mudah untuk menubuhkan beberapa ujian - seperti senarai todo tentang apa yang anda ingin tulis.
mari kita teruskan dengan melaksanakan ujian pertama.
assert.equal(arr.length, 0);
Dalam ujian ini, kami membuat pemboleh ubah elemen dan lulus sebagai parameter ke fungsi AddClass, bersama-sama dengan kelas ujian rentetan (kelas baru untuk ditambah). Kemudian, kami menyemak kelas dimasukkan ke dalam nilai menggunakan pernyataan.
Sekali lagi, kami pergi dari idea awal kami - diberi elemen dan nama kelas, ia harus dimasukkan ke dalam senarai kelas - dan diterjemahkan ke dalam kod dengan cara yang agak mudah.
Walaupun fungsi ini direka untuk bekerja dengan elemen DOM, kami menggunakan objek JS biasa di sini. Kadang -kadang kita boleh menggunakan sifat dinamik JavaScript dalam fesyen ini untuk memudahkan ujian kita. Jika kita tidak melakukan ini, kita perlu membuat elemen sebenar dan ia akan merumitkan kod ujian kami. Sebagai manfaat tambahan, kerana kita tidak menggunakan DOM, kita juga boleh menjalankan ujian ini dalam node.js jika kita mahu.menjalankan ujian dalam penyemak imbas
Untuk menjalankan ujian dalam penyemak imbas, anda perlu menambah classname.js dan classnametest.js kepada pelari:
assert.equal(arr.length, 1, 'Array length was not 0');
lihat ujian pen unit pen dengan mocha (1) oleh sitepoint (@sitePoint) pada codepen.
Seterusnya, mari kita melaksanakan ujian kedua ...
function addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
Berikut adalah satu lagi codepen dengan ujian kedua yang dilaksanakan.
lihat ujian pen unit pen dengan mocha (2) oleh sitepoint (@sitePoint) pada codepen.
Tetapi tunggu! Saya sebenarnya menipu anda sedikit. Terdapat tingkah laku ketiga untuk fungsi ini yang belum kita pertimbangkan. Terdapat juga bug dalam fungsi - yang agak serius. Ia hanya fungsi tiga baris tetapi adakah anda melihatnya?
mari kita tulis satu lagi ujian untuk tingkah laku ketiga yang mendedahkan bug sebagai bonus.
<!-- load your test files here -->
Kali ini ujian gagal. Anda dapat melihatnya dalam tindakan dalam codepen berikut. Masalahnya di sini adalah mudah: nama kelas CSS dalam unsur -unsur harus dipisahkan oleh ruang. Walau bagaimanapun, pelaksanaan ADDClass semasa kami tidak menambah ruang!
lihat ujian pen unit pen dengan mocha (3) oleh sitepoint (@sitePoint) pada codepen.
mari kita selesaikan fungsi dan buat pas ujian.
assert.equal(arr.length, 0);
Dan inilah codepen terakhir dengan fungsi tetap dan ujian lulus.
Lihat ujian unit pen dengan mocha (4) oleh sitepoint (@sitePoint) pada codepen.
menjalankan ujian pada nod
Dalam nod, perkara hanya dapat dilihat dengan perkara lain dalam fail yang sama. Sebagai classname.js dan classnametest.js berada dalam fail yang berbeza, kita perlu mencari cara untuk mendedahkan satu ke yang lain. Cara standard untuk melakukan ini adalah melalui penggunaan modul.exports. Sekiranya anda memerlukan penyegaran, anda boleh membaca semua perkara di sini: pemahaman modul.exports dan eksport dalam node.js
Kod pada dasarnya tetap sama, tetapi berstruktur sedikit berbeza:
assert.equal(arr.length, 1, 'Array length was not 0');
function addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
dan seperti yang anda lihat, ujian lulus.
Seperti yang anda lihat, ujian tidak perlu rumit atau sukar. Sama seperti aspek lain menulis aplikasi JavaScript, anda mempunyai beberapa corak asas yang diulangi. Sebaik sahaja anda mengenali mereka, anda boleh terus menggunakannya lagi dan lagi.
tetapi ini hanya menggaru permukaan. Terdapat banyak lagi untuk belajar tentang ujian unit.
- Menguji sistem yang lebih kompleks
- bagaimana menangani Ajax, pangkalan data, dan lain -lain perkara "luaran"?
- Pembangunan yang didorong oleh ujian
Sebagai alternatif, jika video lebih banyak gaya anda, anda mungkin berminat dalam kursus SitePoint Premium: Pembangunan yang didorong oleh ujian dalam node.js.
Soalan Lazim mengenai JavaScript Ujian Unit dengan Mocha dan Chai
Bagaimana saya memasang mocha dan chai untuk ujian unit dalam javascript?
Untuk memasang mocha dan chai, anda perlu mempunyai node.js dan npm dipasang pada sistem anda. Sebaik sahaja anda mempunyai ini, anda boleh memasang mocha dan chai menggunakan npm. Buka terminal anda dan navigasi ke direktori projek anda. Kemudian, jalankan arahan berikut:
NPM Install--Save-Dev Mocha Chai
Perintah ini memasang mocha dan chai sebagai kebencian untuk projek anda. Bendera--Save-dev digunakan untuk menambahkan ini sebagai kebergantungan pembangunan dalam fail pakej.json anda.
Bagaimana saya menulis ujian asas menggunakan mocha dan chai?
var jangkaan = memerlukan ('chai'). bilangan charachters dalam rentetan ', fungsi () {
Bagaimana saya boleh menjalankan ujian mocha saya? Perintah berikut:
./ node_modules/.bin/mocha
Perintah ini menjalankan binari mocha yang dipasang di folder node_modules anda. Sekiranya anda ingin menjalankan arahan ini hanya sebagai mocha, anda boleh memasang mocha secara global menggunakan NPM Install -g mocha.
Apakah gaya pernyataan yang berbeza yang terdapat di chai? Gaya - harus, mengharapkan, dan menegaskan. Gaya harus memanjangkan setiap objek dengan harta harus memulakan rantai anda. Gaya yang diharapkan memberikan pendekatan yang lebih tradisional, berasaskan fungsi. Gaya menegaskan menyediakan cara klasik dan mudah untuk menulis pernyataan.
mocha dan chai menyediakan beberapa cara untuk menguji kod asynchronous. Anda boleh menggunakan panggilan balik, janji, atau async/menunggu. Berikut adalah contoh menggunakan async/menunggu:
Mocha menyediakan cangkuk seperti sebelum, selepas, sebelum, dan kemudiannya anda boleh gunakan untuk menubuhkan prasyarat dan membersihkan selepas ujian anda. Berikut adalah contoh:
ia ('ujian async', fungsi async () { Bagaimana saya boleh menggunakan cangkuk di mocha?
menerangkan ('cangkuk', fungsi () {
sebelum (function () {
// berjalan sekali sebelum ujian pertama di blok ini
});
selepas (fungsi () {
}); Setiap ujian dalam blok ini
});
});
Bagaimana saya boleh menguji pengecualian dengan chai?
Chai menyediakan pernyataan lemparan untuk pengujian pengujian. Inilah contoh:
ia ('melemparkan ralat', fungsi () {
mengharapkan (fungsi () {membuang ralat baru ('nilai salah');}). nilai ');
Bagaimana saya boleh menggunakan mata -mata, stub, dan mengejek dengan mocha dan chai? Spies, stubs, dan mengejek dengan mocha dan chai, anda boleh menggunakan perpustakaan seperti sinon.js. Sinon.js dapat dengan mudah diintegrasikan dengan mocha dan chai untuk menyediakan fungsi ini. , Nyan, dan banyak lagi. Anda boleh menentukan wartawan untuk digunakan dengan pilihan -Reporter semasa menjalankan ujian anda. Sebagai contoh, Mocha -Reporter Nyan. Bagaimana saya boleh membuat ujian saya lebih mudah dibaca dengan chai? Sebagai contoh, bukannya menulis jangkaan (myvar) .to.be.true;, anda boleh menulis jangkaan (myvar) .to.be.true;. Ini menjadikan ujian anda lebih semula jadi dan lebih mudah difahami.
Atas ialah kandungan terperinci Ujian Unit JavaScript anda menggunakan mocha dan chai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.
