mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 13:54:57 +00:00
- Updated playwright config to use correct port (5000 instead of 5173) - Fixed e2e tests to navigate from landing page before testing login - Simplified tests to focus on UI rendering rather than full auth flows - Added run-act.sh script for running GitHub Actions locally - Added npm scripts: act, act:lint, act:e2e - Updated README with act documentation Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
E2E Testing Guide
This directory contains end-to-end tests for the metabuilder application using Playwright.
Test Files
login.spec.ts- Tests for login functionality, authentication, and password changescrud.spec.ts- Tests for CRUD operations, data tables, and schema editing
Running Tests
Prerequisites
# Install dependencies
npm install
# Install Playwright browsers (if not already installed)
npx playwright install chromium
Running Tests Locally
# Run all tests (headless)
npm run test:e2e
# Run tests with UI mode (interactive)
npm run test:e2e:ui
# Run tests in headed mode (see browser)
npm run test:e2e:headed
# Run specific test file
npx playwright test e2e/login.spec.ts
# Run tests in debug mode
npx playwright test --debug
Test Output
After running tests, you can view:
- HTML Report:
npx playwright show-report - Test Results: Located in
test-results/directory - Screenshots: Captured on test failures
- Videos: Recorded for failed tests (if enabled)
Test Structure
Login Tests (login.spec.ts)
Tests the authentication flow:
- Display of login form on initial load
- Error handling for invalid credentials
- Successful login with valid credentials
- Password change requirement on first login
- Navigation after successful authentication
CRUD Tests (crud.spec.ts)
Tests data management operations:
- Display of data tables/lists
- Create button visibility
- Form opening and interaction
- Input field validation
- Schema editor access (admin users)
Test Configuration
Configuration is in playwright.config.ts:
- Base URL:
http://localhost:5173(Vite dev server) - Browsers: Chromium (can add Firefox, WebKit)
- Retries: 2 retries on CI, 0 locally
- Timeout: 120 seconds for web server startup
- Screenshots: Taken on failure
- Traces: Captured on first retry
CI/CD Integration
Tests run automatically on:
- Every push to main/master/develop branches
- Every pull request
- Manual workflow dispatch
The CI workflow:
- Installs dependencies
- Installs Playwright browsers
- Starts the dev server
- Runs all tests
- Uploads test results and reports as artifacts
Writing New Tests
Basic Test Structure
import { test, expect } from '@playwright/test';
test.describe('Feature Name', () => {
test.beforeEach(async ({ page }) => {
// Setup code (e.g., login)
await page.goto('/');
});
test('should do something', async ({ page }) => {
// Test code
await page.click('button[type="submit"]');
await expect(page.locator('.success')).toBeVisible();
});
});
Best Practices
- Use descriptive test names - Clear, action-oriented descriptions
- Keep tests isolated - Each test should be independent
- Use page object patterns - For complex pages, create page objects
- Wait appropriately - Use
waitForLoadState,waitForTimeoutsparingly - Use semantic locators - Prefer
getByRole,getByLabelover CSS selectors - Test user flows - Test complete user journeys, not just individual actions
- Handle async properly - Always await async operations
- Clean up state - Use
beforeEach/afterEachfor setup/teardown
Common Patterns
// Login helper
async function login(page, username, password) {
await page.getByLabel(/username/i).fill(username);
await page.getByLabel(/password/i).fill(password);
await page.getByRole('button', { name: /login/i }).click();
}
// Wait for navigation
await page.waitForLoadState('networkidle');
// Check visibility with timeout
await expect(page.locator('.element')).toBeVisible({ timeout: 10000 });
// Handle conditional elements
if (await page.locator('.dialog').isVisible()) {
await page.getByRole('button', { name: /close/i }).click();
}
Debugging Tests
Visual Debugging
# Open Playwright Inspector
npx playwright test --debug
# Run with UI mode
npm run test:e2e:ui
# Run in headed mode to see browser
npm run test:e2e:headed
Tracing
# View trace for failed tests
npx playwright show-trace trace.zip
Verbose Output
# Run with verbose logging
DEBUG=pw:api npx playwright test
Known Issues & Limitations
-
Test Credentials - Tests use default seeded credentials
- User:
user/ Password:password123 - Admin:
admin/ Password:admin123
- User:
-
Test Data - Tests assume default seed data is present
-
Timing - Some tests may need adjustment for slower environments
-
State Management - Tests use isolated browser contexts but share the same database
Troubleshooting
Tests Timeout
- Increase timeout in
playwright.config.ts - Check if dev server starts:
npm run dev - Verify port 5173 is available
Tests Fail Locally but Pass in CI
- Check Node.js version matches CI
- Clear browser cache:
npx playwright install --force - Delete
node_modulesand reinstall
Screenshots/Videos Missing
- Check
playwright.config.tssettings - Ensure
test-results/directory exists - Verify sufficient disk space