Wzorzec AAA: Arrange Act Assert

TIP: Ta lekcja jest częścią rozwijanego Programu Testy Automatyczne z Playwright 🎭

Dodatkowe materiały

TIP: Od tej lekcji używamy kontroli wersji Git. Sugerujemy 2 opcje:

1. Kontynuuj jeśli: masz narzędzie Git na swojej maszynie i rozumiesz podstawowe koncepty.

2. Uzupełnij wiedzę ze specjalnego bonusu: Wersjonowanie projektu z Git

TIP: W tej lekcji jesteśmy po aktualizacji Playwright.

Jak taka aktualizacja wygląda? Sprawdź bonus: Aktualizacja paczki playwright i przeglądarek

Kod do tej lekcji znajduje się tu: Sekcja 02, Lekcja 02

Pamiętaj, aby po każdej większej modyfikacji uruchamiać testy 😉

Wydzielenie danych testowych

W pierwszym teście login.spec.ts wyciągamy wartości do osobnych zmiennych:

  test('successful login with correct credentials', async ({ page }) => {
	const url = 'https://demo-bank.vercel.app/';
	const userId = 'testerLO';
	const userPassword = '10987654';

	await page.goto(url);
	await page.getByTestId('login-input').fill(userId);
	await page.getByTestId('password-input').fill(userPassword);
	await page.getByTestId('login-button').click();

	await expect(page.getByTestId('user-name')).toHaveText( 'Jan Demobankowy');
  });

Można taką akcję zrealizować za pomocą:

  1. Kliknięcia w dane string.
  2. Użycia skrótu klawiszowego Ctrl+Shift+R.
  3. Wybierz pierwsza opcję naciskając Enter.
  4. Nazwij zmienną.

Wyciągnięcie danych z asercji

  test('successful login with correct credentials', async ({ page }) => {
	const url = 'https://demo-bank.vercel.app/';
	const userId = 'testerLO';
	const userPassword = '10987654';
	const expectedUserName = 'Jan Demobankowy';

	await page.goto(url);
	await page.getByTestId('login-input').fill(userId);
	await page.getByTestId('password-input').fill(userPassword);
	await page.getByTestId('login-button').click();

	await expect(page.getByTestId('user-name')).toHaveText(expectedUserName);
  });

Wzorzec AAA

Wzorzec AAA opiera się na podziale testu na 3 etapy:

  1. Arrange: przygotowanie danych testowych.
  2. Act: wykonanie akcji testowych.
  3. Assert: zweryfikowanie oczekiwanych rezultatów.

Wyróżnienie AAA w teście

Wystarczy dodać odpowiednie komentarze jeśli test jest jasno podzielony.

  test('successful login with correct credentials', async ({ page }) => {
	// Arrange
	const url = 'https://demo-bank.vercel.app/';
	const userId = 'testerLO';
	const userPassword = '10987654';
	const expectedUserName = 'Jan Demobankowy';

	// Act
	await page.goto(url);
	await page.getByTestId('login-input').fill(userId);
	await page.getByTestId('password-input').fill(userPassword);
	await page.getByTestId('login-button').click();

	// Assert
	await expect(page.getByTestId('user-name')).toHaveText(expectedUserName);
  });

AAA w pierwszym teście pulpitu

Wydzielenie danych testowych i opis poszczególnych bloków AAA:

test('quick payment with correct data', async ({ page }) => {
    	// Arrange
    	const url = 'https://demo-bank.vercel.app/';
    	const userId = 'testerLO';
    	const userPassword = '10987654';

    	const receiverId = '2';
    	const transferAmount = '150';
    	const transferTitle = 'pizza';

    	// Act
    	await page.goto(url);
    	await page.getByTestId('login-input').fill(userId);
    	await page.getByTestId('password-input').fill(userPassword);
    	await page.getByTestId('login-button').click();

    	await page.locator('#widget_1_transfer_receiver').selectOption(receiverId);
    	await page.locator('#widget_1_transfer_amount').fill(transferAmount);
    	await page.locator('#widget_1_transfer_title').fill(transferTitle);

    	await page.getByRole('button', { name: 'wykonaj' }).click();
    	await page.getByTestId('close-button').click();
   	 
    	// Assert
    	await expect(page.locator('#show_messages')).toHaveText('Przelew wykonany! Chuck Demobankowy - 150,00PLN - pizza')

Użycie danych w asercji:

   test('quick payment with correct data', async ({ page }) => {
    	// Arrange
    	const url = 'https://demo-bank.vercel.app/';
    	const userId = 'testerLO';
    	const userPassword = '10987654';

    	const receiverId = '2';
    	const transferAmount = '150';
    	const transferTitle = 'pizza';
    	const expectedTransferReceiver = 'Chuck Demobankowy';

    	// Act
    	await page.goto(url);
    	await page.getByTestId('login-input').fill(userId);
    	await page.getByTestId('password-input').fill(userPassword);
    	await page.getByTestId('login-button').click();

    	await page.locator('#widget_1_transfer_receiver').selectOption(receiverId);
    	await page.locator('#widget_1_transfer_amount').fill(transferAmount);
    	await page.locator('#widget_1_transfer_title').fill(transferTitle);

    	await page.getByRole('button', { name: 'wykonaj' }).click();
    	await page.getByTestId('close-button').click();
   	 
    	// Assert
    	await expect(page.locator('#show_messages')).toHaveText(`Przelew wykonany! ${expectedTransferReceiver} - ${transferAmount},00PLN - ${transferTitle}`);
TIP: Dzięki takiej konstrukcji łatwo zmienisz dane testowe jednocześnie aktualizując asercję!

2 komentarze

    1. Tutaj należy zainstalować narzędzie ‘Prettier’:

      npm install prettier
      

      A następnie dodać pliki konfiguracyjne:
      .prettierignore
      w nim:

      package-lock.json
      playwright-report
      test-results
      tmp
      

      i
      .prettierrc.json
      w nim np:

      {
        "singleQuote": true
      }
      

      W ten sposób powinieneś dostawać jedno formatowanie wszędzie.

      https://jaktestowac.pl/lesson/pw1sb01l06/
      W powyższej lekcji pokazuje najprostszą konfigurację Prettier.

      Jak będziesz miał więcej pytań zapraszam!
      Pozdro i miłej nauki😉

      Przemek Przemek

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *