4.8 KiB
Testing Guide
This document provides information on how to run tests for the 3D Flight Simulator project.
🧪 Test Structure
The project uses a combination of unit tests and end-to-end tests:
tests/
├── unit/ # Unit tests (Jest)
│ └── *.test.js # Test files
└── integration/ # Integration tests (Playwright)
└── *.spec.js # Test files
🚀 Running Tests
Prerequisites
- Node.js (v16 or higher)
- npm or yarn
- Playwright browsers (installed automatically when running tests)
Running Unit Tests
To run unit tests using Jest:
# Run all unit tests
npm test
# Run unit tests in watch mode
npm test -- --watch
# Run specific test file
npm test -- tests/unit/example.test.js
# Run tests with coverage
npm test -- --coverage
Running Playwright Tests
To run end-to-end tests using Playwright:
# Run all Playwright tests
npm run test:e2e
# Run tests in headed mode (visible browser)
npx playwright test --headed
# Run tests for specific browser
npx playwright test --project=chromium
# Run specific test file
npx playwright test tests/integration/example.spec.js
# Run tests in debug mode
npm run test:debug
Running All Tests
To run both unit and Playwright tests:
npm run test:all
📝 Writing Tests
Unit Tests
Unit tests are written using Jest and should test individual functions or components in isolation.
Example:
// tests/unit/math.test.js
describe('Math utilities', () => {
it('should add two numbers', () => {
const result = add(2, 3);
expect(result).toBe(5);
});
});
Playwright Tests
Playwright tests are written using the Playwright Test Runner and should test user interactions and page behavior.
Example:
// tests/integration/loading-screen.spec.js
const { test, expect } = require('@playwright/test');
test('should display loading screen', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveTitle(/3D Flight Simulator/);
await expect(page.locator('.loading-screen')).toBeVisible();
});
🔧 Test Configuration
Jest Configuration
The Jest configuration is located in jest.config.js. Key settings:
testEnvironment: 'node' (for backend tests)testMatch: '/tests/unit//*.test.js'coverageDirectory: 'coverage'
Playwright Configuration
The Playwright configuration is located in playwright.config.js. Key settings:
testDir: './tests'use: {baseURL: 'http://localhost:3000' }projects: [chromium] (default browser)
📊 Test Reports
Jest Reports
Jest generates reports in the following formats:
- Text summary (console output)
- LCOV format (for coverage tools)
- HTML coverage report (in
coverage/lcov-report/index.html)
Playwright Reports
Playwright generates the following reports:
- Test results (console output)
- Trace files (for failed tests)
- Video recordings (for failed tests)
- Screenshots (for failed tests)
To view Playwright reports:
# View last test report
npx playwright show-report
# View trace for specific test
npx playwright show-trace trace/trace.zip
🤖 Continuous Integration
The project uses Gitea Actions for continuous integration. The workflow is defined in:
.gitea/workflows/test.yml
This workflow runs on:
- Push events to
mainanddevbranches - Pull request events targeting
mainanddevbranches
The workflow performs the following steps:
- Checkout code
- Install dependencies
- Install Playwright browsers
- Run unit tests
- Run Playwright tests
- Upload test artifacts (if tests fail)
💡 Best Practices
- Test Naming: Use descriptive test names that explain what is being tested
- Test Organization: Group related tests in the same test file
- Test Isolation: Ensure tests don't depend on each other
- Test Coverage: Aim for high coverage, especially for critical paths
- Test Data: Use realistic test data that matches production scenarios
- Test Performance: Keep tests fast to encourage running them frequently
🐛 Debugging Tests
Debugging Unit Tests
# Run tests in debug mode
npm test -- --debug
# Run specific test in debug mode
npm test -- --testNamePattern="should add two numbers" --debug
Debugging Playwright Tests
# Run tests in debug mode
npm run test:debug
# Pause on first test failure
npx playwright test --debug
# Use Chrome DevTools
npx playwright test --headed
📞 Support
If you encounter issues with the test infrastructure, please:
- Check the test output for error messages
- Verify that all dependencies are installed
- Ensure your Node.js version is compatible
- Review the test configuration files
For questions or issues, please open an issue in the repository.