Lewati ke konten utama

๐Ÿงช Unit Testing di Vue.js

Unit testing adalah pengujian pada bagian terkecil dari aplikasi, seperti fungsi atau komponen Vue, untuk memastikan bahwa mereka bekerja sesuai harapan secara independen.

Vue.js mendukung pengujian dengan berbagai tools, namun kombinasi paling umum adalah:

  • Jest: Framework pengujian JavaScript
  • Vue Test Utils: Utilitas resmi dari Vue untuk testing komponen

๐Ÿงฐ 1. Instalasi (Vue CLI)โ€‹

Jika menggunakan Vue CLI:

vue add unit-jest

Atau install secara manual:

npm install --save-dev jest @vue/test-utils vue-jest babel-jest

Tambahkan script di package.json:

"scripts": {
"test:unit": "jest"
}

๐Ÿงฑ 2. Contoh Komponen: Hello.vueโ€‹

<template>
<h1>{{ greet }}</h1>
</template>

<script>
export default {
name: 'Hello',
props: ['name'],
computed: {
greet() {
return `Halo, ${this.name}`;
}
}
}
</script>

๐Ÿงช 3. Contoh Unit Testโ€‹

File: tests/unit/Hello.spec.js

import { shallowMount } from '@vue/test-utils'
import Hello from '@/components/Hello.vue'

describe('Hello.vue', () => {
it('menampilkan nama dari props', () => {
const wrapper = shallowMount(Hello, {
propsData: { name: 'Dina' }
});
expect(wrapper.text()).toContain('Halo, Dina');
});
});

๐Ÿ” 4. shallowMount vs mountโ€‹

MethodFungsi
shallowMountRender hanya komponen ini saja, tidak termasuk child-nya
mountRender penuh, termasuk child component

Gunakan shallowMount untuk unit test dan mount untuk integration test.


๐Ÿ“‚ 5. Struktur Direktori Testingโ€‹

tests/
โ”œโ”€โ”€ unit/
โ”‚ โ””โ”€โ”€ Hello.spec.js

Pastikan jest mencari direktori tests/unit/ sesuai konfigurasi.


๐Ÿ”„ 6. Menjalankan Testโ€‹

npm run test:unit

Hasil akan menunjukkan berapa banyak test yang berhasil, gagal, atau di-skip.


โœ… 7. Best Practiceโ€‹

  • Buat test untuk setiap komponen penting

  • Fokus pada logic, props, event, dan kondisi tampilan

  • Hindari testing untuk code yang sudah di-test oleh Vue sendiri (seperti <template> sederhana)

  • Gunakan coverage report untuk memastikan cakupan testing


๐Ÿง  8. Test Lanjutanโ€‹

  • Event emit ($emit)

  • Kondisi v-if / v-for

  • Input form (v-model)

  • Integrasi dengan Vuex atau Router