Laravel
Laravel • Module Test • Projet Pratique

Atelier Pratique : Suite Complète de Tests Laravel & Pest

Bâtissez l'infrastructure de test complète d'une application SaaS de Réservation & Facturation en Laravel 11. Vous associerez les tests unitaires de calculs, les tests Feature avec Form Requests et validation Blade, l'isolation transactionnelle par RefreshDatabase et la sécurisation d'API REST par Sanctum.

⚡
Services Purs

Calcul des taxes, remises et règles métier sans démarrage du kernel pour une exécution en < 5ms.

📋
Feature & Blade

Validation des FormRequests, gestion des sessions flash et assertion sur les variables de vues Blade.

🐘
Eloquent & Factories

Génération de fausses données avec Faker, assertions assertDatabaseHas et isolation par transaction.

🛡️
API Sanctum & Fakes

Tests d'endpoints JSON avec Sanctum::actingAs(), interception Mail::fake() et Queue::fake().

Studio Interactif : Runner Artisan Test & Jauge de Couverture

Activez les suites Pest PHP pour simuler l'exécution en parallèle et observer l'évolution de la couverture globale.

Fichiers sous Test de l'Application Laravel :
✅
PricingService (Calculs TTC & Remises)
tests/Unit/PricingServiceTest.php
95% Couvert
unit
✅
BookingController (Validation & Vues)
tests/Feature/BookingControllerTest.php
91% Couvert
feature-web
✅
User & Booking Eloquent (Relations & BDD)
tests/Feature/EloquentBookingTest.php
88% Couvert
eloquent
⏳
Notification Listener & Queue Fake
tests/Unit/BookingNotificationTest.php
Non testé
unit
✅
Sanctum Bookings API Endpoint
tests/Feature/ApiBookingTest.php
89% Couvert
feature-api
Couverture de Code Globale (Pest)
73%

⚠️ Seuil de 80% requis avant la mise en production.

$ php artisan test --parallel
Running tests in 4 processes...
PASS tests/Unit/PricingServiceTest.php
PASS tests/Feature/BookingControllerTest.php
PASS tests/Feature/EloquentBookingTest.php
SKIP tests/Unit/BookingNotificationTest.php
PASS tests/Feature/ApiBookingTest.php
Tests: 4 passés, 1 en attente
1. Test de Mutation API Sanctum & Mail::fake()

Vérifiez la réservation d'un créneau, l'insertion en BDD et l'envoi du mail de confirmation.

use App\Models\User;
use App\Models\Booking;
use App\Mail\BookingConfirmedMail;
use Illuminate\Support\Facades\Mail;
use Laravel\Sanctum\Sanctum;

it('réserve un créneau et expédie le mail de confirmation', function () {
    Mail::fake();
    $client = User::factory()->create();
    Sanctum::actingAs($client);

    $response = $this->postJson('/api/bookings', [
        'start_at' => now()->addDay()->toDateTimeString(),
        'seats'    => 2,
    ]);

    $response->assertCreated();

    $this->assertDatabaseHas('bookings', [
        'user_id' => $client->id,
        'seats'   => 2,
    ]);

    Mail::assertSent(BookingConfirmedMail::class, function ($mail) use ($client) {
        return $mail->hasTo($client->email);
    });
});
2. Pipeline GitHub Actions pour Laravel (test.yml)

Automatisez l'exécution des tests Pest sous PHP 8.3 avec cache Composer et SQLite en mémoire.

name: Laravel Pest CI

on: [push, pull_request]

jobs:
  pest-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: mbstring, pdo_sqlite, bcmath
          coverage: pcov

      - name: Install Dependencies
        run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist

      - name: Run Pest Suite
        run: ./vendor/bin/pest --parallel --coverage --min=80
Grille d'Évaluation & Barème du Projet
LivrableOutil RequisCritère de RéussitePondération
1. Tests Unitaires CalculsPest PHP TestCaseRègles tarifaires et taxes isolées sans boot du framework.25%
2. Feature Tests & Form Requests$this->post() / postJson()Validation stricte des règles 422 et messages flash de redirection.25%
3. Base de Données EloquentRefreshDatabase + FactoriesCréation par states, relations hasMany et assertDatabaseHas.25%
4. API Sanctum & FakesSanctum + Mail::fakeSimulation d'authentification et assertion d'envoi d'e-mails sans SMTP.25%