Post

Pengantar Cypress (dengan Contoh SauceDemo)

Pengantar Cypress (dengan Contoh SauceDemo)

Apa itu Cypress?

Cypress adalah framework pengujian end-to-end modern untuk aplikasi web yang berjalan di browser dengan DX yang baik dan kecepatan tinggi.

Kapan Menggunakannya

  • Validasi flow UI kritikal, cepat dieksekusi dan mudah diparalelisasi.

Contoh: Login dan Verifikasi Produk di SauceDemo

Target situs: https://www.saucedemo.com/.

cypress/e2e/saucedemo.cy.js

1
2
3
4
5
6
7
8
9
10
describe('SauceDemo - Login', () => {
  it('should login and see inventory list', () => {
    cy.visit('https://www.saucedemo.com/');
    cy.get('#user-name').type('standard_user');
    cy.get('#password').type('secret_sauce');
    cy.get('#login-button').click();
    cy.get('.inventory_list').should('be.visible');
    cy.contains('.inventory_item_name', 'Sauce Labs Backpack').should('be.visible');
  });
});

Menjalankan Tes

  • Instal: npm i -D cypress
  • Buka UI: npx cypress open
  • Headless: npx cypress run

Tips Stabilitas

  • Gunakan selector yang stabil (data-test) bila tersedia.
  • Hindari wait statis; manfaatkan assertion bawaan Cypress yang retry-able.

Sumber situs uji: SauceDemo.

Custom Commands dan Fixtures

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// cypress/support/commands.js
Cypress.Commands.add('loginSauce', (user = 'standard_user', pass = 'secret_sauce') => {
  cy.visit('https://www.saucedemo.com/');
  cy.get('#user-name').type(user);
  cy.get('#password').type(pass);
  cy.get('#login-button').click();
  cy.get('.inventory_list').should('be.visible');
});

// cypress/e2e/cart.cy.js
describe('Cart flow', () => {
  it('adds product to cart', () => {
    cy.loginSauce();
    cy.contains('.inventory_item', 'Sauce Labs Backpack').contains('Add to cart').click();
    cy.get('.shopping_cart_badge').should('contain', '1');
  });
});

CI Contoh (GitHub Actions)

1
2
3
4
5
6
7
8
9
10
11
name: cypress
on: [push]
jobs:
  e2e:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20' }
      - run: npm ci
      - run: npx cypress run
This post is licensed under CC BY 4.0 by the author.