Powrót do: Praktyczne wprowadzenie do testów automatycznych z Playwright
Wzorzec AAA: Arrange Act Assert
Dodatkowe materiały
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
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ą:
- Kliknięcia w dane string.
- Użycia skrótu klawiszowego Ctrl+Shift+R.
- Wybierz pierwsza opcję naciskając Enter.
- 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:
- Arrange: przygotowanie danych testowych.
- Act: wykonanie akcji testowych.
- 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}`);
Cześć, gdzie zmienić w VSC że kod z nagrywania za pomocą PW będzie korzystał z ‘ zamiast ” przy selektorach itd…?
Tutaj należy zainstalować narzędzie ‘Prettier’:
A następnie dodać pliki konfiguracyjne:
.prettierignore
w nim:
i
.prettierrc.json
w nim np:
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😉