Tests Directory
This directory contains all test files for the MineSeeker project.
Quick Start
# Run all tests (recommended)
make test
# Or with PHPUnit directly:
vendor/bin/phpunit
# Run specific test file
vendor/bin/phpunit tests/Controller/ProfileControllerTest.php
# Run with filter
vendor/bin/phpunit --filter testCreateUser
Documentation
For comprehensive testing documentation, see:
- Testing Guide - Complete testing setup, best practices, troubleshooting
- Factory Documentation - Detailed factory API reference
Directory Structure
tests/
├── Controller/ # HTTP endpoint tests
├── Dto/ # Data Transfer Object tests
├── Entity/ # Entity logic tests
├── Service/ # Service layer tests
├── Integration/ # Integration tests (example: FactoryExampleTest.php)
├── Factory/ # Foundry factory classes
│ ├── UserFactory.php
│ ├── GamerFactory.php
│ ├── PlayedGameFactory.php
│ ├── StepFactory.php
│ ├── GridFactory.php
│ ├── GridRowFactory.php
│ ├── WebAuthnCredentialFactory.php
│ └── ContactMessageFactory.php
├── WebTestCase.php # Base test class (extends this!)
├── bootstrap.php # PHPUnit bootstrap
└── README.md # This file
Quick Factory Examples
use App\Tests\Factory\UserFactory;
use App\Tests\Factory\PlayedGameFactory;
use App\Tests\WebTestCase;
class MyTest extends WebTestCase
{
public function testExample(): void
{
/** Create user */
$user = UserFactory::createOne();
/** Create game with registered players */
$game = PlayedGameFactory::new()
->withRegisteredPlayers()
->redWins()
->create();
/** Create multiple entities */
UserFactory::createMany(5);
/** Access repository */
$users = UserFactory::repository()->findAll();
}
}
Important Notes
- Always extend
App\Tests\WebTestCase- provides database isolation - Use factories - don't manually create entities with
new Entity() - Test database - Tests run on
mineseeker_test, never production - Automatic rollback - Each test is wrapped in a transaction
Test Database Setup (One-time)
# Create test database
bin/console dbal:run-sql "CREATE DATABASE mineseeker_test"
# Run migrations
bin/console doctrine:migrations:migrate --env=test --no-interaction
Troubleshooting
Tests interfering with each other?
→ Make sure your test extends App\Tests\WebTestCase
Database schema out of sync?
→ Run bin/console doctrine:migrations:migrate --env=test
Memory limit errors?
→ Run php -d memory_limit=512M vendor/bin/phpunit
For more troubleshooting, see Testing Guide.