UNPKG

agent-rules-kit

Version:

CLI tool to bootstrap AI agent rules for multiple IDEs and frameworks. Generates optimized rules for Cursor, VS Code, Claude, and 6+ other AI coding assistants.

205 lines (156 loc) 5 kB
--- description: Testing best practices for Laravel 12 globs: <root>/tests/**/*.php alwaysApply: false --- ## Testing in Laravel 12 This file complements the base Laravel testing practices with specific aspects for version 12. ## Testing Innovations in Laravel 12 ### Integrated Test Runner Laravel 12 includes a new native test runner that enhances the testing experience: ```bash # Run all tests php artisan test # Run with advanced options php artisan test --parallel --coverage ``` ### Pest PHP as the Standard Pest PHP becomes the de facto standard for testing in Laravel 12: ```php // tests/Feature/UserTest.php <?php use App\Models\User; it('can view the dashboard when authenticated', function () { // Arrange $user = User::factory()->create(); // Act & Assert $this->actingAs($user) ->get('/dashboard') ->assertOk() ->assertViewIs('dashboard'); }); it('redirects to login when not authenticated', function () { // Act & Assert $this->get('/dashboard') ->assertRedirect('/login'); }); ``` ### API Testing with Laravel Prompts ```php test('can create a user via API', function () { // Arrange $userData = [ 'name' => 'Test User', 'email' => 'test@example.com', 'password' => 'password', 'password_confirmation' => 'password', ]; // Act $response = $this->postJson('/api/users', $userData); // Assert $response->assertCreated() ->assertJsonPath('data.name', $userData['name']) ->assertJsonPath('data.email', $userData['email']); $this->assertDatabaseHas('users', [ 'email' => $userData['email'], ]); }); ``` ### Testing with Broadcasting Laravel 12 makes it easier to test broadcast events: ```php test('notification is broadcast to user', function () { // Arrange Event::fake([NotificationSent::class]); $user = User::factory()->create(); // Act $this->actingAs($user) ->post('/notifications/test'); // Assert Event::assertDispatched(function (NotificationSent $event) use ($user) { return $event->notifiable->id === $user->id && $event->channel === 'database'; }); }); ``` ## CI/CD with GitHub Actions for Laravel 12 Example of optimized GitHub Actions configuration: ```yaml name: Laravel Tests on: push: branches: [main, develop] pull_request: branches: [main, develop] jobs: laravel-tests: runs-on: ubuntu-latest services: mysql: image: mysql:8.0 env: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: laravel_test ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, pdo_mysql coverage: xdebug - uses: actions/checkout@v3 - name: Copy .env run: cp .env.example .env - name: Install Composer Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress - name: Generate Key run: php artisan key:generate - name: Directory Permissions run: chmod -R 777 storage bootstrap/cache - name: Execute Tests env: DB_CONNECTION: mysql DB_HOST: 127.0.0.1 DB_PORT: 3306 DB_DATABASE: laravel_test DB_USERNAME: root DB_PASSWORD: password run: php artisan test --parallel ``` ## New Assertions in Laravel 12 Laravel 12 includes new assertions that simplify testing: ```php // HTTP response testing $response->assertSuccessful(); $response->assertCreated(); $response->assertNoContent(); // JSON testing $response->assertJsonPath('data.attributes.title', 'My Title'); $response->assertJsonCount(3, 'data'); // Email testing Mail::assertSent(WelcomeEmail::class, function ($mail) use ($user) { return $mail->hasTo($user->email) && $mail->subject === 'Welcome to our platform'; }); ``` ## Parallelization and Performance Laravel 12 significantly improves test performance: ```bash # Run tests with parallelization and specific group php artisan test --parallel --group api ``` Configuration to improve performance in `phpunit.xml`: ```xml <phpunit colors="true" processIsolation="false" stopOnFailure="false" cacheResult="true" cacheResultFile=".phpunit.result.cache" > <!-- ... --> </phpunit> ``` > Note: These practices are specific to Laravel 12. Make sure to update your tests when migrating from previous versions.