Skip to content

Bab 8: Testing Front-End

Published: at 10:57 PM

8.1 Pengantar Testing Front-End

Pengujian (testing) adalah proses penting dalam pengembangan perangkat lunak untuk memastikan bahwa kode yang ditulis berfungsi sesuai harapan dan bebas dari bug. Pengujian front-end fokus pada validasi tampilan dan interaksi antarmuka pengguna, memastikan bahwa elemen-elemen UI berfungsi dengan benar dan memberikan pengalaman yang diharapkan kepada pengguna.

Mengapa Pengujian Penting?

8.2 Jenis-jenis Pengujian

Ada beberapa jenis pengujian yang digunakan dalam pengembangan front-end:

Unit Testing

Unit testing menguji bagian terkecil dari aplikasi, biasanya fungsi atau komponen individual, untuk memastikan mereka bekerja dengan benar.

Integration Testing

Integration testing menguji bagaimana berbagai unit atau komponen bekerja bersama untuk memastikan mereka berfungsi dengan benar saat digabungkan.

End-to-End (E2E) Testing

End-to-end testing menguji seluruh aplikasi dari awal hingga akhir untuk memastikan semua bagian bekerja bersama dengan baik. Pengujian ini mensimulasikan interaksi pengguna sebenarnya.

Snapshot Testing

Snapshot testing adalah teknik di mana UI komponen atau halaman disimpan sebagai snapshot dan dibandingkan dengan versi saat ini untuk mendeteksi perubahan yang tidak diinginkan.

8.3 Alat Pengujian

Berbagai alat pengujian tersedia untuk membantu pengujian front-end. Berikut adalah beberapa alat yang umum digunakan:

Jest

Jest adalah framework pengujian JavaScript yang sering digunakan untuk unit dan integration testing. Jest mudah digunakan dan mendukung snapshot testing.

Contoh Penggunaan Jest

// sum.js
function sum(a, b) {
  return a + b;
}
module.exports = sum;

// sum.test.js
const sum = require('./sum');

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Enzyme

Enzyme adalah library pengujian untuk React yang memungkinkan Anda untuk menguji komponen React secara mendalam.

Contoh Penggunaan Enzyme

import React from 'react';
import { shallow } from 'enzyme';
import App from './App';

test('renders without crashing', () => {
  shallow(<App />);
});

Cypress

Cypress adalah alat pengujian end-to-end yang kuat dan modern untuk aplikasi web. Cypress memungkinkan Anda untuk menulis pengujian yang sangat mendekati interaksi pengguna sebenarnya.

Contoh Penggunaan Cypress

describe('My First Test', () => {
  it('Visits the Kitchen Sink', () => {
    cy.visit('https://example.cypress.io');
    cy.contains('type').click();
    cy.url().should('include', '/commands/actions');
    cy.get('.action-email').type('fake@email.com')
      .should('have.value', 'fake@email.com');
  });
});

Selenium

Selenium adalah alat pengujian yang memungkinkan Anda untuk menulis pengujian end-to-end yang bekerja di berbagai browser dan platform.

Contoh Penggunaan Selenium

const { Builder, By, until } = require('selenium-webdriver');

(async function example() {
  let driver = await new Builder().forBrowser('firefox').build();
  try {
    await driver.get('http://www.google.com');
    await driver.findElement(By.name('q')).sendKeys('webdriver');
    await driver.findElement(By.name('btnK')).click();
    await driver.wait(until.titleIs('webdriver - Google Search'), 1000);
  } finally {
    await driver.quit();
  }
})();

8.4 Menulis Tes yang Efektif

Menulis tes yang efektif memerlukan pemahaman yang baik tentang apa yang harus diuji dan bagaimana cara menulis tes yang dapat diandalkan.

Best Practices untuk Menulis Tes

Contoh Menulis Tes yang Baik

Tes Unit

// calculator.js
function add(a, b) {
  return a + b;
}

function subtract(a, b) {
  return a - b;
}

module.exports = { add, subtract };

// calculator.test.js
const { add, subtract } = require('./calculator');

test('adds 1 + 2 to equal 3', () => {
  expect(add(1, 2)).toBe(3);
});

test('subtracts 5 - 2 to equal 3', () => {
  expect(subtract(5, 2)).toBe(3);
});

Tes Integration

// api.js
async function fetchData(url) {
  const response = await fetch(url);
  return response.json();
}

module.exports = fetchData;

// api.test.js
const fetchData = require('./api');

test('fetches data from an API', async () => {
  const data = await fetchData('https://jsonplaceholder.typicode.com/todos/1');
  expect(data).toHaveProperty('id', 1);
});

8.5 Mengintegrasikan Pengujian dengan CI/CD

Continuous Integration (CI) dan Continuous Deployment (CD) adalah praktik penting dalam DevOps yang mengotomatisasi pengujian dan deployment aplikasi. Mengintegrasikan pengujian dengan CI/CD memastikan bahwa setiap perubahan kode diuji sebelum diterapkan ke produksi.

Menggunakan GitHub Actions untuk CI/CD

GitHub Actions memungkinkan Anda untuk mengotomatiskan alur kerja pengembangan, termasuk pengujian dan deployment.

Contoh Konfigurasi GitHub Actions

name: Node.js CI

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x, 14.x]

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install
    - run: npm test

8.6 Alat dan Praktik untuk Monitoring Kualitas Kode

Menggunakan alat untuk monitoring kualitas kode membantu dalam menjaga standar kode yang tinggi dan memastikan bahwa kode tetap sehat dan terjaga.

Linting

Linting adalah proses menggunakan alat untuk menganalisis kode sumber untuk menemukan masalah potensial. ESLint adalah salah satu alat linting yang paling populer untuk JavaScript.

Konfigurasi Dasar ESLint

// .eslintrc.json
{
  "env": {
    "browser": true,
    "es2021": true
  },
  "extends": "eslint:recommended",
  "parserOptions": {
    "ecmaVersion": 12,
    "sourceType": "module"
  },
  "rules": {
    "indent": ["error", 2],
    "linebreak-style": ["error", "unix"],
    "quotes": ["error", "single"],
    "semi": ["error", "always"]
  }
}

Prettier

Prettier adalah code formatter yang memastikan kode Anda memiliki gaya konsisten.

Konfigurasi Dasar Prettier

// .prettierrc
{
  "singleQuote": true,
  "semi": true,
  "tabWidth": 2
}

Integrasi Linting dan Formatting dengan CI

Mengintegrasikan linting dan formatting ke dalam CI/CD memastikan bahwa semua kode yang digabungkan ke basis kode mengikuti standar yang ditetapkan.

Contoh Konfigurasi GitHub Actions untuk Linting

name: Lint

on: [push, pull_request]

jobs:
  lint:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - run: npm install
    - run: npx eslint . --ext .js,.jsx,.ts,.tsx

Kesimpulan

Pengujian front-end adalah komponen vital dalam pengembangan aplikasi web modern. Dengan memahami berbagai jenis pengujian, menggunakan alat pengujian yang tepat, menulis tes yang efektif, dan mengintegrasikan pengujian ke dalam CI/CD, Anda dapat memastikan bahwa aplikasi Anda berfungsi dengan baik dan bebas dari bug. Bab berikutnya akan membahas cara menjaga dan meningkatkan keterampilan Anda sebagai front-end developer melalui pembelajaran berkelanjutan dan keterlibatan dalam komunitas pengembang.