Apa itu unit testing?
Sebelum kita masuk ke sana, kita perlu memahami apa yang dimaksud dengan kata “testing” di sini.
Testing is the process of evaluating a system or its component(s) with the intent to find whether it satisfies the specified requirements or not.
Testing is executing a system in order to identify any gaps, errors, or missing requirements in contrary to the actual requirements.
Kedua pengertian tersebut dapat ditemui di situs tutorialspoint. Ringkasnya, testing adalah sebuah proses untuk mengevaluasi apakah:
- Sistem sesuai dengan persyaratan yang sudah ditentukan.
- Sistem terbebas dari bug atau error.
Biasanya di perusahaan teknologi, mereka memiliki satu role sendiri yang melakukan testing. Beberapa menyebutnya dengan QA (quality assurance), atau juga bernama TE (test engineer). Cuman untuk unit test ini ruang lingkup yang bertanggung jawab adalah developer, baik itu backend engineer, frontend engineer, ataupun mobile apps developer.
Mengapa perlu unit testing?
Meskipun di perusahaan tempat kita bekerja sudah memiliki divisi QA atau TE, kita sebagai developer juga bertanggung jawab penuh atas kode yang kita hasilkan. Kita wajib memastikan bahwa kode yang kita tulis itu bug-free sebelum akhirnya deploy ke production dan digunakan oleh user. Karena pada akhirnya yang tahu seluk beluk fitur yang dipakai user adalah kita yang menghasilkan kode. Sehingga QA atau TE kita cukup melakukan testing di edge case tertentu yang tidak dapat dipikirkan oleh user atau mungkin kita.
Di sinilah unit test berperan. Manfaat lain dari unit test adalah kita menjadi lebih percaya diri terhadap kode yang kita hasilkan. Sehingga kemungkinan munculnya bug akan sedikit, atau bahkan tidak ada.
Layer dalam software testing
Gambar piala di bawah ini menjelaskan tentang empat layer dari metode software testing yang ada di aplikasi web, yang mana konteksnya adalah javascript.
Keempat layer tersebut:
- Static test adalah teknik pengujian yang paling dasar. Biasanya bug yang didapat dari metode pengujian ini adalah kesalahan kalimat (typo), gambar, warna tombol, dan kesalahan sintaks.
- Unit test adalah teknik pengujian yang menyasar logika-logika terkecil dari suatu halaman. Contohnya pengujian untuk logika perhitungan matematika dari sebuah total pembelanjaan.
- Integration test adalah teknik pengujian yang menggabungkan beberapa unit logika menjadi satu alur yang saling berkaitan. Jika konteksnya masih seperti logika perhitungan dari total pembelanjaan, maka integration test akan melakukan pengujian untuk alur total pembelanjaan bersamaan dengan validasi pembeli (jika di sistem kita ada logika untuk melakukan validasi terhadap user tertentu yang dapat melakukan pembelian).
- E2E (End-to-end) test adalah teknik pengujian otomatis yang seolah-olah ada robot yang sedang melakukan interaksi ke halaman website kita. Robot tersebut akan memasukkan nama, menambah keranjang belanja, hingga melakukan pembayaran seolah-olah robot tersebut adalah real user yang sedang belanja.
Dari keempat layer tersebut, pada umumnya peran developer hanya di layer pertama hingga ketiga. Layer keempat biasanya menjadi tanggung jawab QA atau TE. Cuman, tidak ada salahnya jika kita sebagai developer juga sanggup untuk melakukan e2e testing juga.
Pada tulisan ini kita hanya fokus di unit testing di javascript. Semoga di kesempatan selanjutnya kita dapat membahas layer-layer testing lainnya ya.
Lalu, bagaimana cara membuat unit test?
Kita akan menggunakan kode, untuk menguji kode kita.
Maksudnya adalah kita akan membuat kode terpisah yang tujuannya adalah untuk menguji fungsi dan logika dari kode fitur yang kita buat.
Kita akan menyederhanakan kode fitur yang kita buat sehingga menjadi unit-unit logika terkecil yang nantinya unit-unit tersebut dapat kita uji melalui kode unit test. Itulah mengapa kita sering mendengar istilah testable code, yaitu kode yang dengan unit logika paling sederhana, saking sederhananya kita dapat membuat unit test untuk kode tersebut dengan mudah.
Tahap selanjutnya
Setelah mengenal unit testing dan macam-macam testing lain, kita akan sedikit belajar bagaimana cara kerja unit test. Kita akan menulis kode unit test menggunakan native javascript terlebih dahulu tanpa bantuan test runner apapun.