Lewati ke konten utama

๐ŸŒ E2E Testing di Vue.js

End-to-End (E2E) testing adalah metode pengujian aplikasi secara menyeluruh โ€” dari input pengguna hingga hasil yang ditampilkan di browser. Di Vue.js, alat paling umum untuk E2E testing adalah Cypress.


๐Ÿ”ง 1. Apa Itu Cypress?โ€‹

Cypress adalah framework modern untuk pengujian UI berbasis browser. Dengan Cypress, kamu bisa menulis test yang mensimulasikan interaksi nyata pengguna, seperti klik tombol, isi form, navigasi halaman, dll.


๐Ÿ“ฆ 2. Instalasi Cypressโ€‹

a. Jika pakai Vue CLI:โ€‹

vue add e2e-cypress

b. Manual:โ€‹

npm install --save-dev cypress

Tambahkan script di package.json:

"scripts": {
"test:e2e": "cypress open"
}

๐Ÿ“‚ 3. Struktur Direktoriโ€‹

Setelah instalasi, folder cypress/ akan berisi:

cypress/
โ”œโ”€โ”€ integration/ # Di sinilah file test kamu berada
โ”œโ”€โ”€ support/ # Helper dan konfigurasi global
โ””โ”€โ”€ fixtures/ # Data mock (opsional)

๐Ÿงช 4. Contoh Test Sederhanaโ€‹

File: cypress/integration/homepage.spec.js

describe('Halaman Utama', () => {
it('menampilkan judul halaman', () => {
cy.visit('http://localhost:8080');
cy.contains('h1', 'Selamat Datang');
});

it('bisa klik tombol dan ubah teks', () => {
cy.get('button').click();
cy.contains('p', 'Anda sudah klik tombol');
});
});

๐Ÿงญ 5. Menjalankan E2E Testโ€‹

GUI Mode (interaktif):

npm run test:e2e

Akan membuka Cypress Test Runner secara visual.

Headless (CI Mode):

npx cypress run

Cocok untuk pipeline CI/CD seperti GitHub Actions atau GitLab CI.


๐Ÿง  6. Fitur Cypressโ€‹

FiturKeterangan
cy.visit()Membuka URL
cy.get()Seleksi elemen dengan CSS selector
cy.contains()Seleksi berdasarkan teks
cy.click()Simulasi klik
cy.type()Isi input form
cy.should()Assertion (verifikasi)
cy.intercept()Mock/fake request API

๐Ÿงผ 7. Tips dan Best Practiceโ€‹

  • Gunakan data-testid untuk selector yang lebih stabil

  • Jangan uji logic JavaScript โ†’ gunakan unit test untuk itu

  • Jalankan Cypress di environment yang menyerupai produksi

  • Simpan data dummy di folder fixtures/ jika diperlukan


โœ… 8. Contoh Test Interaktifโ€‹

it('login berhasil dengan kredensial benar', () => {
cy.visit('/login');
cy.get('#email').type('admin@example.com');
cy.get('#password').type('123456');
cy.get('form').submit();
cy.url().should('include', '/dashboard');
});