# 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 e2eFrontend 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 reportEnd-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 modeThe 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 --incrementalUltra-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 --incrementalGood 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 --incrementalFull features (slow)
- All languages
- All data processing
- All features enabled
- ~60-90 second startup
bundle exec jekyll serveLet Playwright manage the server:
npm run e2eStart 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 e2eSee what's happening in the browser:
npm run e2e:headedInteractive test development:
npm run e2e:uiGitHub 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