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
Wenn Sie Pest noch nicht installiert haben, können Sie dies tun, indem Sie der offiziellen Pest-Installationsanleitung folgen.
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); } }
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') ]; } }
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); } }
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
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!