Skip to main content

Testing

Overview

Smart Academic Hub backend includes comprehensive testing with PHPUnit.

Test Types

Unit Tests

Test individual classes and methods in isolation.

Feature Tests

Test API endpoints and application features end-to-end.

Integration Tests

Test interactions between components.

Running Tests

# Run all tests
php artisan test

# Run specific test file
php artisan test tests/Feature/AuthTest.php

# Run with coverage
php artisan test --coverage

Test Structure

tests/
├── Feature/
│ ├── AuthTest.php
│ ├── AcademyTest.php
│ ├── StudentTest.php
│ └── ...
├── Unit/
│ ├── Models/
│ └── Services/
└── TestCase.php

Writing Tests

Feature Test Example

public function test_user_can_login()
{
$user = User::factory()->create();

$response = $this->postJson('/api/v1/auth/login', [
'email' => $user->email,
'password' => 'password',
]);

$response->assertStatus(200)
->assertJsonStructure(['token']);
}

Unit Test Example

public function test_academy_has_students()
{
$academy = Academy::factory()->create();
$students = Student::factory(3)->create([
'academy_id' => $academy->id
]);

$this->assertCount(3, $academy->students);
}

Test Database

  • Uses in-memory SQLite for speed
  • Automatic migrations before tests
  • Database refresh between tests

Factories

Laravel factories for test data generation:

$user = User::factory()->create();
$academy = Academy::factory()->create();
$student = Student::factory()->create();

Best Practices

  1. Test business logic, not framework features
  2. Use factories for test data
  3. Mock external services
  4. Keep tests isolated and independent
  5. Write descriptive test names
  6. Aim for high coverage
  7. Test edge cases and error scenarios

Continuous Integration

Tests run automatically on:

  • Pull requests
  • Commits to main branch
  • Pre-deployment checks