Private
Public Access
1
0
Files
MineSeeker/tests/README.md

2.9 KiB

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:

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.