React.js
  • Roadmap belajar React.js
  • Tahap 1: Dasar-dasar JavaScript
    • Apa itu JavaScript dan kegunaannya
    • Sejarah dan perkembangan JavaScript
    • Apa itu Node.js dan hubungannya dengan JavaScript
    • Cara instal Node.js
    • Cara menjalankan JavaScript di Node.js
    • Variabel dalam JavaScript
    • Tipe data dalam JavaScript
    • Operator dalam JavaScript
    • Truly dan Falsy dalam JavaScript
    • Kondisional dalam JavaScript
    • Looping dalam JavaScript
    • Fungsi dalam JavaScript
    • Parameter dan Return Value dalam JavaScript
    • DOM di JavaScript dan Cara manipulasinya
    • Event Handling dalam JavaScript
    • Try, catch, dan finally dalam JavaScript
    • Callback dalam JavaScript
    • Promise dalam JavaScript
    • Async dan Await dalam JavaScript
  • Tahap 2: JavaScript Lanjutan
    • OOP dalam JavaScript
    • ES6
    • LocalStorage dalam JavaScript
    • FetchAPI dalam JavaScript
  • Tahap 3: Memulai dengan React.js
    • Apa itu React?
    • Konsep Virtual DOM
    • Apa itu JSX?
    • Langkah-langkah Setup Project React.js
    • Apa itu Komponen dalam React?
    • Apa itu Props dan State dalam React?
    • Apa itu Event Handling dalam React?
    • Apa itu Component Lifecycle dalam React?
    • Apa itu Hooks dalam React?
    • Apa itu Custom Hooks dalam React?
  • Tahap 4: React Lanjutan
    • Apa itu Context API dalam React?
    • Apa itu State Management (Redux)?
    • Apa itu Routing di React?
    • Apa itu Dynamic Routing, Private Routing, dan Nested Routing?
    • Cara menulis CSS di React
    • Cara Menggunakan Bootstrap di React
    • Cara Menggunakan Tailwind CSS di React
    • Cara Fetching data dari API di React
    • Cara Menampilkan data dinamis di React
    • Error handling dalam pengambilan data
    • Cara Testing komponen di React
    • End-to-end testing dengan Cypress atau Selenium
Powered by GitBook
On this page
  1. Tahap 4: React Lanjutan

End-to-end testing dengan Cypress atau Selenium

End-to-end (E2E) testing adalah jenis pengujian yang digunakan untuk memverifikasi seluruh alur kerja aplikasi dari awal hingga akhir untuk memastikan bahwa semua komponen berfungsi dengan baik secara keseluruhan. Dua alat yang populer untuk melakukan E2E testing adalah Cypress dan Selenium.

1. Cypress

Cypress adalah alat modern untuk E2E testing yang dirancang untuk aplikasi web. Ini sangat cepat, mudah digunakan, dan memiliki integrasi yang kuat dengan ekosistem JavaScript.

Fitur Utama Cypress:

  • Real-time Reloads: Setiap kali Anda mengubah kode, Cypress akan secara otomatis memuat ulang dan menjalankan ulang tes.

  • Automatic Waiting: Cypress secara otomatis menunggu hingga elemen yang diuji tersedia di DOM.

  • Powerful Debugging: Cypress memiliki alat debugging yang kuat dengan kemampuan untuk melihat snapshot dari setiap langkah pengujian.

Instalasi Cypress

npm install cypress --save-dev

Setelah instalasi, Anda dapat membuka Cypress untuk pertama kalinya dengan perintah berikut:

npx cypress open

Contoh Pengujian E2E dengan Cypress

Misalkan kita ingin menguji halaman login.

File cypress/integration/login.spec.js:

describe('Login Page Test', () => {
  it('should successfully login with valid credentials', () => {
    cy.visit('http://localhost:3000/login');

    cy.get('input[name="username"]').type('testuser');
    cy.get('input[name="password"]').type('password123');
    cy.get('button[type="submit"]').click();

    cy.url().should('include', '/dashboard');
    cy.get('h1').should('contain', 'Welcome to your dashboard');
  });

  it('should show error message with invalid credentials', () => {
    cy.visit('http://localhost:3000/login');

    cy.get('input[name="username"]').type('wronguser');
    cy.get('input[name="password"]').type('wrongpassword');
    cy.get('button[type="submit"]').click();

    cy.get('.error-message').should('contain', 'Invalid username or password');
  });
});

Menjalankan Tes dengan Cypress

Untuk menjalankan tes, gunakan perintah berikut:

npx cypress open

Ini akan membuka UI Cypress di mana Anda dapat menjalankan tes dan melihat hasilnya secara real-time.

2. Selenium

Selenium adalah alat open-source yang lebih lama dan banyak digunakan untuk mengotomatisasi browser web. Selenium mendukung berbagai bahasa pemrograman seperti JavaScript, Python, Java, dan lainnya. Selenium juga mendukung berbagai browser dan platform.

Fitur Utama Selenium:

  • Cross-Browser Testing: Selenium dapat digunakan untuk mengotomatisasi browser seperti Chrome, Firefox, Safari, dan lain-lain.

  • Multi-Language Support: Selenium mendukung banyak bahasa pemrograman.

  • Remote Execution: Dengan Selenium Grid, Anda dapat menjalankan tes di beberapa mesin dengan berbagai konfigurasi browser.

Instalasi Selenium dengan JavaScript

Untuk menggunakan Selenium dengan JavaScript, Anda dapat menginstal paket selenium-webdriver.

npm install selenium-webdriver

Contoh Pengujian E2E dengan Selenium

Berikut adalah contoh pengujian yang melakukan tindakan login di halaman web.

File test/login.test.js:

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

describe('Login Page Test', function() {
  let driver;

  before(async function() {
    driver = await new Builder().forBrowser('chrome').build();
  });

  after(async function() {
    await driver.quit();
  });

  it('should successfully login with valid credentials', async function() {
    await driver.get('http://localhost:3000/login');
    await driver.findElement(By.name('username')).sendKeys('testuser');
    await driver.findElement(By.name('password')).sendKeys('password123');
    await driver.findElement(By.css('button[type="submit"]')).click();

    await driver.wait(until.urlContains('/dashboard'), 10000);
    const heading = await driver.findElement(By.tagName('h1')).getText();
    if (heading !== 'Welcome to your dashboard') {
      throw new Error('Login failed');
    }
  });

  it('should show error message with invalid credentials', async function() {
    await driver.get('http://localhost:3000/login');
    await driver.findElement(By.name('username')).sendKeys('wronguser');
    await driver.findElement(By.name('password')).sendKeys('wrongpassword');
    await driver.findElement(By.css('button[type="submit"]')).click();

    const errorMessage = await driver.findElement(By.className('error-message')).getText();
    if (errorMessage !== 'Invalid username or password') {
      throw new Error('Error message not displayed');
    }
  });
});

Menjalankan Tes dengan Selenium

Untuk menjalankan tes Selenium, Anda cukup menggunakan node:

node test/login.test.js

Perbandingan Cypress dan Selenium

Aspek
Cypress
Selenium

Bahasa

JavaScript

Multi-bahasa (JavaScript, Python, Java, dll.)

Kecepatan

Sangat cepat

Tergantung pada eksekusi browser

Ekosistem

Terintegrasi dengan baik di JS

Banyak dukungan dan pustaka tambahan

Kemudahan Penggunaan

Mudah, dengan integrasi yang baik

Lebih kompleks, tapi lebih fleksibel

Debugging

Mudah dengan snapshot dan UI bawaan

Mengandalkan konsol browser dan debug eksternal

Kesimpulan

  • Cypress adalah pilihan yang sangat baik jika Anda mencari alat testing modern dan mudah digunakan, terutama jika Anda bekerja di lingkungan JavaScript.

  • Selenium adalah pilihan yang baik jika Anda memerlukan dukungan multi-browser dan berbagai bahasa pemrograman.

Sumber

Dengan melakukan E2E testing, Anda memastikan bahwa seluruh alur kerja aplikasi diuji dari awal hingga akhir, membantu menemukan dan memperbaiki bug sebelum aplikasi dirilis ke pengguna.

PreviousCara Testing komponen di React

Last updated 9 months ago

Cypress Documentation
Selenium Documentation