Heim >Backend-Entwicklung >PHP-Tutorial >So erstellen Sie einen Testfall in Laravel mit Pest

So erstellen Sie einen Testfall in Laravel mit Pest

WBOY
WBOYOriginal
2024-08-06 07:13:42980Durchsuche

How to Create a Test Case in Laravel Using Pest

Das Testen Ihrer Laravel-Anwendung ist entscheidend, um sicherzustellen, dass Ihr Code wie erwartet funktioniert. Pest ist ein Testframework für PHP, das minimalistisch und benutzerfreundlich gestaltet ist. In diesem Blogbeitrag gehen wir Schritt für Schritt durch die Erstellung eines Testfalls in Laravel mit Pest und konzentrieren uns dabei auf ein Beispiel, in dem wir die Erstellung eines Arbeitgeberdatensatzes testen, einschließlich des Hochladens eines Logos.

Voraussetzungen

  • Laravel-Anwendung eingerichtet
  • Schädling in Ihrer Laravel-Anwendung installiert

Wenn Sie Pest noch nicht installiert haben, können Sie dies tun, indem Sie der offiziellen Pest-Installationsanleitung folgen.

Schritt 1: Einrichten der Modelle und Beziehungen

Stellen Sie sicher, dass Ihre Benutzer- und Arbeitgebermodelle mit den erforderlichen Beziehungen korrekt eingerichtet sind.

Benutzermodell (app/Models/User.php):

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Relations\HasOne;

class User extends Authenticatable
{
    public function employer(): HasOne
    {
        return $this->hasOne(Employer::class);
    }
}

Arbeitgebermodell (app/Models/Employer.php):

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Employer extends Model
{
    protected $fillable = ['name', 'email', 'phone', 'address', 'city', 'website', 'user_id', 'logo'];

    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }
}

Schritt 2: Fabriken einrichten

Erstellen Sie Fabriken zum Generieren von Testdaten.

Benutzerfabrik (Datenbank/Fabriken/UserFactory.php):

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => bcrypt('password'), // password
            'remember_token' => Str::random(10),
        ];
    }
}

Employer Factory (Datenbank/Fabriken/EmployerFactory.php):

namespace Database\Factories;

use App\Models\Employer;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Http\UploadedFile;

class EmployerFactory extends Factory
{
    protected $model = Employer::class;

    public function definition()
    {
        return [
            'name' => $this->faker->company,
            'email' => $this->faker->companyEmail,
            'phone' => $this->faker->phoneNumber,
            'address' => $this->faker->address,
            'city' => $this->faker->city,
            'website' => $this->faker->url,
            UploadedFile::fake()->image('logo.png')
        ];
    }
}

Schritt 3: Schreiben des Controllers

Erstellen Sie eine Controller-Methode, um die Erstellung eines Arbeitgebers zu verwalten.

Employer Controller (app/Http/Controllers/EmployerController.php):

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Employer;
use Illuminate\Support\Facades\Storage;

class EmployerController extends Controller
{
    public function __construct()
    {

    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|email',
            'phone' => 'required|string',
            'address' => 'nullable|string',
            'city' => 'nullable|string',
            'website' => 'nullable|url',
            'logo' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);

        if ($request->hasFile('logo')) {
            $path = $request->file('logo')->store('logos', 'public');
            $validated['logo'] = $path;
        }

        $employer = $request->user()->employer()->create($validated);

        return response()->json($employer, 201);
    }
}

Schritt 4: Erstellen der Schädlingstests

Erstellen Sie Testdateien und schreiben Sie Testfälle, um die Erstellung eines Arbeitgebers zu überprüfen, einschließlich des Hochladens eines Logos.

Erstellen Sie die Testdatei:

php artisan pest:test EmployerControllerTest

Schreiben Sie die Testfälle (tests/Feature/EmployerControllerTest.php):

<?php

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use App\Models\Employer;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;

uses(RefreshDatabase::class);

it('prevents guests from creating an employer', function () {
    // Define the data to be sent in the POST request
    $data = [
        'name' => 'Test Employer',
        'email' => 'test@employer.com',
        'phone' => '1234567890',
        'address' => '123 Employer St',
        'city' => 'Employer City',
        'website' => 'https://www.employer.com',
    ];

    // Send the POST request to create the employer as a guest (unauthenticated)
    $response = $this->post('/api/employers', $data);

    // Assert that the response status is 401 (Unauthorized)
    $response->assertStatus(401);

    // Optionally, check that the employer was not created
    $this->assertDatabaseMissing('employers', [
        'name' => 'Test Employer',
        'email' => 'test@employer.com',
    ]);
});

it('creates a new employer for authenticated user', function () {
    // Create a user and log them in
    $user = User::factory()->create();
    Auth::login($user);

    // Define the data to be sent in the POST request
    $data = [
        'name' => 'Test Employer',
        'email' => 'test@employer.com',
        'phone' => '1234567890',
        'address' => '123 Employer St',
        'city' => 'Employer City',
        'website' => 'https://www.employer.com',
    ];

    // Send the POST request to create the employer
    $response = $this->post('/api/employers', $data);

    // Assert that the response status is 201 (Created)
    $response->assertStatus(201);

    // Assert that the employer was created
    $this->assertDatabaseHas('employers', [
        'name' => 'Test Employer',
        'email' => 'test@employer.com',
    ]);
});

it('creates a new employer with a logo', function () {
    // Create a user and log them in
    $user = User::factory()->create();
    Auth::login($user);

    // Fake a storage disk for testing
    Storage::fake('public');

    // Define the data to be sent in the POST request
    $data = [
        'name' => 'Test Employer',
        'email' => 'test@employer.com',
        'phone' => '1234567890',
        'address' => '123 Employer St',
        'city' => 'Employer City',
        'website' => 'https://www.employer.com',
        'logo' => UploadedFile::fake()->image('logo.png'), // Fake file for testing
    ];

    // Send the POST request to create the employer
    $response = $this->post('/api/employers', $data);

    // Assert that the response status is 201 (Created)
    $response->assertStatus(201);

    // Optionally, check if the employer was actually created
    $this->assertDatabaseHas('employers', [
        'name' => 'Test Employer',
        'email' => 'test@employer.com',
    ]);

    // Check that the file was uploaded
    Storage::disk('public')->assertExists('logos/logo.png'); // Adjust path as needed
});

Schritt 5: Führen Sie Ihre Schädlingstests durch
Führen Sie Ihre Schädlingstests durch, um sicherzustellen, dass alles wie erwartet funktioniert:

php artisan test --testsuit=Feature

Abschluss

Indem Sie diese Schritte befolgen, können Sie mit Pest Testfälle in Laravel erstellen, um die Erstellung eines Arbeitgeberdatensatzes zu überprüfen, einschließlich der Handhabung von Datei-Uploads. Dieser Ansatz stellt sicher, dass sich Ihre Anwendung wie erwartet verhält und hilft dabei, Probleme frühzeitig im Entwicklungsprozess zu erkennen. Viel Spaß beim Testen!

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen Testfall in Laravel mit Pest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn