# Install dependencies npm install # Install Playwright browsers (just Chromium for quick testing) npm run playwright:install # Run E2E tests with automatic server startup npm run e2e
Frontend JavaScript unit tests with mocked browser APIs.
npm test # Run all unit tests npm run test:watch # Watch mode for development npm run test:coverage # Generate coverage report
End-to-end tests that run against a real Jekyll server.
npm run e2e # Run all E2E tests npm run e2e:fast # Chromium only (fastest) npm run e2e:headed # See the browser npm run e2e:debug # Step through tests npm run e2e:ui # Interactive UI mode
The project includes multiple Jekyll configurations optimized for different use cases:
Fastest option for E2E testing
- English only
- No archive/legacy processing
- Minimal plugins
- ~10-15 second startup
npm run serve:test # or bundle exec jekyll serve --config _config.yml,_config.test.yml --incremental
Ultra-fast for quick checks
- English only
- Only current conferences
- Bare minimum features
- ~5-10 second startup
npm run serve:minimal # or bundle exec jekyll serve --config _config.yml,_config.minimal.yml --incremental
Good balance for development
- English and German
- No archive/legacy
- Most features enabled
- ~20-30 second startup
npm run serve:dev # or bundle exec jekyll serve --config _config.yml,_config.dev.yml --incremental
Full features (slow)
- All languages
- All data processing
- All features enabled
- ~60-90 second startup
bundle exec jekyll serveLet Playwright manage the server:
npm run e2e
Start server separately for faster test iterations:
# Terminal 1: Start fast test server npm run serve:test # Terminal 2: Run tests (with existing server) npm run e2e
See what's happening in the browser:
npm run e2e:headed
Interactive test development:
npm run e2e:ui
GitHub Actions workflows are configured to:
- Use the test configuration for speed
- Run tests on multiple browsers
- Generate coverage reports
- Comment on PRs with results
- Permission requests
- Deadline alerts (7, 3, 1 day)
- Toast notifications
- Settings persistence
- Real-time updates
- Timezone handling
- Format variations
- Performance with many timers
- Favoriting/unfavoriting
- Dashboard display
- Action bar interactions
- Search and filtering
- Use test configuration: Always use
_config.test.ymlfor E2E tests - Run single browser: Use
npm run e2e:fastfor quick checks - Keep server running: Start server once, run multiple test iterations
- Use incremental builds: The
--incrementalflag speeds up rebuilds - Skip initial build: Use
--skip-initial-buildwhen content hasn't changed
- Check if port 4000 is already in use
- Try the minimal configuration for faster startup
- Increase timeout in
playwright.config.js
- Ensure browser has notification permissions
- Check that localStorage is not blocked
- Verify JavaScript is enabled
- Mock time for consistent testing
- Use
waitForCountdownshelper - Allow for 1-2 second variance
- Check Ruby/Bundler installation
- Run
bundle install - Clear Jekyll cache:
rm -rf _site .jekyll-cache
Place in tests/frontend/unit/:
import { mockHelpers } from '../utils/mockHelpers'; describe('Feature', () => { test('should work', () => { // Test implementation }); });
Place in tests/e2e/specs/:
import { test, expect } from '@playwright/test'; import { helpers } from '../utils/helpers'; test.describe('Feature', () => { test('should work', async ({ page }) => { await page.goto('/'); // Test implementation }); });
- Unit Tests: 80% line coverage
- E2E Tests: All critical user paths
- Visual Tests: Key page states
- Performance: Page load < 3s