Playwright P7: “Đánh dấu” một test với fail, fixme, skip, slow, only

⏱︎

Read time:

1–2 minutes
Playwright P9: fail, fixme, skip, slow, setTimeout, step và test.info

Trong quá trình viết test, đôi khi chúng ta cần đánh dấu 1 test vì một nguyên nhân nào đó bất khả kháng 😅

fail, fixme, only và skip

// test này expect là sẽ phải fail, nếu fail thật thì test là pass; nếu nó mà pass thì test này lại thành fail
test.fail(true, 'BUG-123: kết quả đang sai');

// test này có ý nghĩa đánh dấu là "hãy fix tôi"
test.fixme(process.platform === 'linux', 'Chưa hỗ trợ Linux');

// trong 1 file có 10 test, nếu 1 test đánh dấu là only thì chỉ chạy test đó
test.only('Tôi đang tập trung vào test này thôi');

// test này bị skip ở report
test.skip('Tính năng không có trên WebKit');

test.fail() đánh dấu rằng test được kỳ vọng sẽ fail; nếu lại pass thì kết quả bị coi là bất thường. fixme và skip đều không chạy test, nhưng fixme truyền đạt rằng test/tính năng cần được sửa.

slow và setTimeout

// tăng timeout mặc định cho test này x3 default (default ở trong file config)
test.slow("đây là 1 test chậm"); 

// cách này thì set thủ công timeOut cho test đó
test('import dữ liệu lớn', async ({ page }) => {
  test.setTimeout(90_000);
  // ...
});

step làm report dễ đọc

Trong 1 test, bạn có thể tạo các step để cho dễ đọc, ví dụ như sau

import { test, expect } from '@playwright/test';

test('Quy trình mua hàng cơ bản', async ({ page }) => {
  
  // Bước 1: Đăng nhập
  await test.step('Đăng nhập vào hệ thống', async () => {
    await page.goto('https://example.com');
    await page.fill('#username', 'user123');
    await page.fill('#password', 'password123');
    await page.click('#login-button');
    await expect(page).toHaveURL('https://example.com');
  });

  // Bước 2: Thêm sản phẩm vào giỏ
  await test.step('Thêm sản phẩm vào giỏ hàng', async () => {
    await page.click('.product-item >> text=Mua ngay');
    await expect(page.locator('.cart-count')).toHaveText('1');
  });
});