Di tempat kerja, kami baru saja memulai aplikasi berbasis Javascript (sebenarnya menggunakan Coffeescript, tetapi masih), yang mana saya telah menerapkan sistem pengujian otomatis menggunakan JsTestDriver dan fabric.
Kami belum pernah menulis sesuatu dengan Javascript sebanyak ini, jadi sampai sekarang kami belum pernah melakukan pengujian Javascript. Saya tidak yakin apa tepatnya yang harus kami uji dalam unit test kami. Kami telah menulis plugin JQuery untuk berbagai hal, jadi cukup jelas bahwa mereka harus diverifikasi kebenarannya sebanyak mungkin dengan JsTestDriver, tetapi semua orang di tim saya tampaknya berpikir bahwa kami juga harus menguji Javascript tingkat halaman.
Saya tidak berpikir kita harus menguji Javascript tingkat halaman sebagai unit test, melainkan menggunakan sistem seperti Selenium untuk memverifikasi semuanya berfungsi seperti yang diharapkan. Alasan utama saya untuk ini adalah bahwa saat ini, tes Javascript tingkat halaman dijamin gagal melalui JsTestDriver, karena mereka mencoba mengakses elemen pada DOM yang tidak mungkin ada.
Jadi, apa yang harus diuji unit dalam Javascript?
sumber
Jawaban:
Uji semua yang Anda bisa.
Logika murni dapat diuji dengan mudah.
Jika kode Anda berinteraksi dengan DOM atau jaringan, itu jauh lebih sulit.
Jika Anda bisa mengabstraksi sepotong kode untuk bekerja pada elemen DOM acak alih-alih yang spesifik, maka Anda dapat mengujinya lebih mudah. (Buat elemen untuk bekerja pada parameter).
Kode yang menggunakan Ajax dapat diuji dengan hanya memanggil fungsi panggilan balik dengan data tetap. Saya telah menjalani beberapa tes di mana saya menimpa
$.ajax
dengan fungsi saya sendiri. Pastikan Anda mengembalikan yang asli saat selesai!Apa yang akan Anda temukan adalah bahwa "javascript tingkat halaman" benar-benar berarti, "kode yang digabungkan secara ketat," dan jika Anda memisahkan bagian-bagian dari kode tersebut, Anda dapat mengujinya secara independen.
(Selenium bukan alat pengujian unit. Ini bagus untuk skenario tingkat tinggi, tetapi Anda tidak dapat menguji drive dengan itu, dan itu tidak bekerja di lingkungan yang terisolasi.)
sumber
$(document).ready(...)
....
. :-) Saya merasa Anda harus bisa mendapatkan ke fungsi bernama tunggal yang juga diuji. Maka kode Anda yang belum diuji adalah satu baris. (Nah, itu gol, bukan yang diberikan. Dalam praktiknya, saya selalu punya lebih dari satu baris kode yang belum diuji.)Algoritma uji. Bagian yang berhubungan erat dengan GUI lebih tergantung pada browser tertentu sehingga harus diuji menggunakan utilitas mirip selenium.
Kode Anda, tentu saja, harus mengandung algoritma sebagai potongan kode yang terisolasi, jika tidak maka pengujian unit hampir mustahil.
plugin jquery, btw, tidak mudah diuji unit.
sumber
Saya dulu bekerja dengan Java dan dari apa yang saya lihat pengujian unit Java lebih mudah daripada pengujian unit JavaScript karena Java lebih kaku.
Saya dijual pada pengembangan yang digerakkan oleh tes adalah hal terbaik jadi saya juga mencari cara untuk menguji unit JavaScript. Di Jawa saya telah membuat kode yang membuat koneksi ke database, Objek Akses Data, dan saya membandingkannya dengan kode dalam JavaScript yang mengubah DOM dan kode yang membuat panggilan AJAX ke server.
Yang saya maksudkan adalah bahwa menurut saya apa yang harus diuji adalah logika secara eksplisit. Misalnya, Anda tidak ingin membuat panggilan AJAX ketika Anda menjalankan tes unit karena (a) Anda memerlukan server untuk menjalankan dan (b) lambat dan salah satu pedoman pengujian unit adalah bahwa itu harus sangat cepat sehingga pengembang tidak menghindari menjalankannya seperti setiap menit.
Pedoman lain adalah untuk proses integrasi berkesinambungan untuk mengirim e-mail yang mengatakan bahwa ia menemukan unit test yang gagal.
sumber