Gambar 1. Pengenalan Unit Testing.
Unit testing adalah jenis pengujian perangkat lunak yang dilakukan pada level terkecil dari unit-program yang independen secara fungsional. Dalam pengembangan perangkat lunak, unit merujuk pada bagian terkecil dari kode yang dapat diuji secara terisolasi.
Tujuan utama dari unit testing adalah untuk memastikan bahwa setiap unit kode berfungsi sebagaimana mestinya secara terisolasi.[1] Dalam proses ini, unit kode diuji dengan memberikan input khusus dan memverifikasi output yang dihasilkan. Dengan melakukan unit testing, kalian dapat mengidentifikasi dan memperbaiki kesalahan (bugs) serta memastikan bahwa perubahan yang dilakukan tidak merusak fungsionalitas yang ada.
Unit testing biasanya dilakukan dengan menggunakan kerangka pengujian (testing framework) seperti Jest yang menyediakan alat dan fitur untuk menjalankan pengujian. Unit testing dapat dilakukan secara otomatis, memungkinkan kalian untuk menguji kode secara terus-menerus saat melakukan perubahan atau penambahan pada proyek. Berikut adalah beberapa keuntungan lain yang dapat dipertimbangkan dalam melakukan unit testing:
Unit testing memungkinkan pengujian dilakukan lebih cepat karena fokus pada pengujian unit-unit kode yang terisolasi.
Unit testing tidak tergantung pada koneksi atau keadaan database, sehingga tidak memerlukan akses ke lingkungan eksternal.
Dengan melakukan unit testing, kalian dapat secara efisien mencari bug atau kesalahan pada kode. Karena unit testing fokus pada pengujian unit-unit kode yang spesifik, bug atau kesalahan dapat diisolasi dengan lebih mudah, sehingga memudahkan proses debug dan perbaikan.
Unit testing dapat berfungsi sebagai bentuk dokumentasi perangkat lunak. Saat menulis pengujian, kalian harus memahami secara mendalam cara kerja unit kode tersebut.
Dengan melakukan unit testing, kalian cenderung menulis kode yang lebih terstruktur, modular, dan mudah diuji. Ini mendorong praktik pengembangan yang memungkinkan kode menjadi lebih reusable (dapat digunakan kembali) di berbagai bagian proyek.
Dengan mempertimbangkan keuntungan-keuntungan ini, unit testing dapat membantu pengembang dalam meningkatkan kualitas perangkat lunak, meningkatkan efisiensi pengujian, dan mempercepat proses pengembangan secara keseluruhan.
Gambar 2. Pengenalan Jest.
Jest adalah sebuah framework pengujian (testing) open-source yang dikembangkan oleh Facebook. Jest adalah alat serbaguna dan dapat digunakan untuk memvalidasi hampir semua hal yang berkaitan dengan JavaScript dan dirancang dengan tujuan utama untuk menguji aplikasi web berbasis React dan React Native. Ini sangat berguna untuk merender aplikasi web kalian di browser.
Jest juga menjadi pilihan yang populer untuk pengujian browser otomatis, menjadikannya salah satu framework pengujian JavaScript yang paling populer dan terkenal. Jest menyediakan berbagai fitur dan alat untuk membantu kalian dalam melakukan pengujian unit, integrasi, dan fungsional pada kode JavaScript. Dengan Jest, kalian dapat menguji berbagai aspek dari kode kalian, termasuk fungsi, modul, komponen UI, dan logika bisnis.
Konfigurasi dan Instalasi Jest
Perlu diingat, karena kita akan menguji CRUD pada materi sebelumnya yang menggunakan database maka kita memerlukan koneksi external. Untuk melakukan konfigurasi dan instalasi Jest pada aplikasi web berbasis Express.js, kalian dapat mengikuti langkah-langkah berikut:
Karena pada materi sebelumnya kita sudah membuat proyek menggunakan express.js, kita bisa langsung menginstal Jest.
Kita dapat menginstal Jest dan supertest kedalam dev-dependencies karena kita hanya perlu menggunakan Jest untuk development saja.
Gambar 3. Instalasi Jest.
Perintah di gambar 3 akan menginstal Jest sebagai development dependencies pada proyek kalian. Opsi --save-dev digunakan untuk menyimpan Jest sebagai development dependencies yang hanya diperlukan selama pengembangan, bukan saat aplikasi berjalan di produksi.
Gambar 4. Instalasi supertest.
Perintah di gambar 4 akan menginstal Supertest sebagai development dependencies di proyek kalian dan menambahkan entri Supertest ke dalam file package.json. Opsi --save-dev digunakan untuk menyimpan Jest sebagai development dependencies yang hanya diperlukan selama pengembangan, bukan saat aplikasi berjalan di produksi.
Gambar 4. Konfigurasi scripts test.
Perintah di gambar 4 merupakan konfigurasi "scripts" dengan "test": "jest" dalam file package.json yang memungkinkan kalian untuk menjalankan pengujian menggunakan Jest dengan perintah npm test.
Gambar 5. Konfigurasi Jest pada package.json.
Perintah di gambar 5 merupakan konfigurasi Jest didalam file package.json. Properti "testEnvironment" diatur ke "node" yang menunjukkan bahwa lingkungan pengujian yang digunakan adalah lingkungan Node.js. Properti "testMatch" digunakan untuk mencocokkan pola file yang akan diujikan, di mana pola tersebut mencakup file dengan ekstensi .js atau .jsx dalam folder "tests" atau file yang diakhiri dengan "spec.js" atau "test.js". Properti "testTimeout" menentukan batas waktu pengujian dalam milidetik sebelum pengujian dianggap gagal. Dalam konfigurasi ini, batas waktu pengujian diatur menjadi 30000 milidetik (30 detik).
Gambar 6. Membuat folder dan file testing.
a. Users
Gambar 7. Membuat program pada file users.test.js untuk melakukan testing.
Pada program di gambar 7, kita membuat kerangka pengujian Jest dengan express, supertest, dan database MySQL. Pertama, dilakukan impor modul yang diperlukan seperti express, supertest, router users, dan konfigurasi basis data (db). Fungsi describe untuk mengelompokkan pengujian, dan fungsi test untuk menjalankan pengujian. Pengujian pertama, program akan mengirim permintaan GET ke route "/" dan memeriksa apakah responsenya adalah "API READY TO GO!". Pengujian kedua, program akan mengirim permintaan GET ke route "/employee" dan memeriksa apakah responsnya sesuai dengan hasil query SQL yang dilakukan pada basis data. Pengujian ini memungkinkan pengujian endpoint dan interaksi dengan basis data secara bersamaan.
Gambar 8. Membuat program pada file users.test.js untuk melakukan testing (lanjutan).
Pada program di gambar 8, kita melakukan pengujian untuk endpoint POST "/employee". Pada pengujian ini, dilakukan pengiriman permintaan POST ke route "/employee" dengan request body yang berisi data employee (nama, job, dan salary). Response dari permintaan tersebut diperiksa apakah sesuai dengan hasil query SQL yang dilakukan pada basis data. Dalam pengujian ini, program akan memastikan bahwa data employee telah berhasil dimasukkan ke dalam basis data dengan menguji response dari permintaan dan membandingkannya dengan hasil query SQL. Setelah pengujian selesai, dilakukan penutupan koneksi basis data menggunakan metode db.end().
b. UsersPrisma
Gambar 9. Membuat program pada file usersPrisma.test.js untuk melakukan testing.
Pada program di gambar 9, kita melakukan pengujian Jest dengan menggunakan Prisma ORM, express, dan supertest. Pertama, dilakukan impor modul yang diperlukan seperti PrismaClient dari Prisma, express, dan supertest, serta router usersPrisma. Fungsi describe untuk mengelompokkan pengujian, dan fungsi test untuk menjalankan pengujian. Pada pengujian ini, program akan mengirim permintaan GET ke route "/" dan memeriksa apakah response dari permintaan tersebut sama dengan hasil pemanggilan metode findMany() dari Prisma untuk entitas "employee". Dengan demikian, pengujian ini memverifikasi apakah penggunaan Prisma ORM dengan Express berfungsi dengan baik dalam meresponse permintaan pada route yang ditentukan.
Gambar 10. Membuat program pada file usersPrisma.test.js untuk melakukan testing (lanjutan).
Pada program di gambar 10, kita melakukan pengujian untuk endpoint POST "/employee". Pada pengujian ini, dilakukan pengiriman permintaan POST ke route "/employee" dengan request body yang berisi data employee (nama, job, dan salary). Response dari permintaan tersebut diperiksa apakah sesuai dengan hasil pembuatan data employee menggunakan Prisma ORM. Dalam pengujian ini, program akan memastikan bahwa data employee telah berhasil dibuat dan response dari permintaan sama dengan data yang telah dibuat menggunakan Prisma ORM. Dengan demikian, pengujian ini memverifikasi apakah endpoint POST "/employee" berfungsi dengan baik dalam membuat data employee baru dengan Prisma ORM.
Jalankan perintah npx jest pada terminal untuk menjalankan pengujian. Jest akan mencari dan menjalankan semua file pengujian yang sesuai dalam direktori proyek kalian.
Gambar 11. Pengujian menggunakan npx jest.
Hasil perintah npx jest menunjukkan bahwa semua tes yang terdapat dalam file usersPrisma.test.js dan users.test.js telah berhasil melewati dan berhasil dijalankan. Ada dua paket tes yang berhasil dijalankan, dengan total lima tes yang berhasil. Tidak ada snapshot yang diambil dalam pengujian ini. Waktu total yang dibutuhkan untuk menjalankan pengujian adalah sekitar 1.696 detik, dengan estimasi sekitar 12 detik. Seluruh paket tes telah selesai dijalankan tanpa adanya kegagalan.
1. Apa yang dimaksud dengan unit testing?
A. Jenis pengujian perangkat lunak pada level terkecil dari unit-program yang independen secara fungsional.
B. Jenis pengujian perangkat lunak pada level integrasi antara berbagai unit kode.
C. Pengujian perangkat keras pada level unit-program.
D. Pengujian perangkat lunak pada level sistem secara keseluruhan.
E. Pengujian perangkat lunak pada level pengguna akhir.
2. Apa tujuan utama dari unit testing?
A. Menguji fungsionalitas keseluruhan sistem.
B. Memastikan koneksi dan akses ke database berjalan dengan baik.
C. Memverifikasi bahwa setiap unit kode bekerja dengan benar dan menghasilkan hasil yang diharapkan.
D. Mengidentifikasi dan memperbaiki kesalahan (bugs) pada basis data.
E. Menguji performa sistem pada beban tertentu.
3. Apa keuntungan melakukan unit testing?
A. Meningkatkan reusabilitas kode.
B. Mengurangi kompleksitas pengembangan perangkat lunak.
C. Mempercepat waktu pengujian.
D. Meningkatkan keandalan dan kualitas perangkat lunak.
E. Mengurangi penggunaan sumber daya sistem.
4. Apa yang dimaksud dengan Jest?
A. Framework pengujian (testing) open-source yang dikembangkan oleh Facebook.
B. Alat untuk menguji performa perangkat keras.
C. Bahasa pemrograman yang digunakan untuk pengujian perangkat lunak.
D. Kerangka kerja untuk mengembangkan aplikasi web berbasis React dan React Native.
E. Alat untuk memvalidasi sintaksis JavaScript.
5. Apa yang dimaksud dengan supertest?
A. Alat untuk memvalidasi sintaksis CSS.
B. Kerangka kerja untuk pengujian performa aplikasi web.
C. Alat untuk memvalidasi respons dari permintaan HTTP.
D. Bahasa pemrograman untuk menguji basis data.
E. Kerangka kerja untuk pengujian unit pada aplikasi desktop.
6. Apa yang harus dilakukan sebelum menginstal Jest pada proyek?
A. Membuat folder dan file untuk pengujian.
B. Menginstal supertest terlebih dahulu.
C. Memastikan proyek menggunakan Express.js.
D. Mengkonfigurasi script "test" pada package.json.
E. Menginstal Prisma ORM.
7. Apa yang perlu dikonfigurasi dalam package.json untuk menggunakan Jest?
A. Mengatur environment menjadi "browser".
B. Menambahkan entri "jest" dengan nilai true.
C. Mengatur properti "testMatch" dengan pola file yang akan diujikan.
D. Mengatur batas waktu pengujian pada properti "testTimeout".
E. Menginstal dependensi "jest-cli".
8. Apa yang dilakukan dalam pengujian menggunakan Jest dan supertest pada file users.test.js?
A. Menguji endpoint GET "/" dan "/employee" serta interaksi dengan basis data.
B. Menguji performa aplikasi web berbasis React dan React Native.
C. Menguji respons dari permintaan POST pada endpoint "/employee".
D. Menguji validitas sintaksis JavaScript pada file users.test.js.
E. Menguji performa perangkat keras.
9. Apa yang dilakukan dalam pengujian menggunakan Jest, Prisma ORM, dan supertest pada file usersPrisma.test.js?
A. Menguji endpoint GET "/" dan "/employee" serta interaksi dengan basis data menggunakan Prisma ORM.
B. Menguji respons dari permintaan POST pada endpoint "/employee" menggunakan Prisma ORM.
C. Menguji performa aplikasi web berbasis React dan React Native.
D. Menguji validitas sintaksis JavaScript pada file usersPrisma.test.js.
E. Menguji performa perangkat keras.
10. Bagaimana cara menjalankan pengujian menggunakan Jest?
A. Menjalankan perintah "npm run test" pada terminal.
B. Menjalankan perintah "npx jest" pada terminal.
C. Menjalankan perintah "npm start" pada terminal.
D. Menjalankan perintah "node test.js" pada terminal.
E. Menjalankan perintah "npm test" pada terminal.
Referensi
Mengenal Unit Testing Dengan Jest | by Ananda Pramono | Medium
Mengapa Jest Adalah Salah Satu Framework JavaScript Teratas? | WEBAPP | APPKEY