コードが期待どおりに動作することを確認するには、Laravel アプリケーションをテストすることが重要です。 Pest は、最小限でユーザーフレンドリーになるように設計された PHP のテスト フレームワークです。このブログ投稿では、ロゴのアップロードなど、雇用主レコードの作成をテストする例に焦点を当てて、Pest を使用して Laravel でテスト ケースを作成する手順を説明します。
前提条件
Pest をまだインストールしていない場合は、公式 Pest インストール ガイドに従ってインストールできます。
ユーザー モデルと雇用主モデルが必要な関係で正しく設定されていることを確認してください。
ユーザーモデル (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); } }
雇用主モデル (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); } }
テスト データを生成するためのファクトリーを作成します。
ユーザーファクトリー (データベース/factories/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), ]; } }
雇用主ファクトリー (データベース/factories/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') ]; } }
雇用主の作成を処理するコントローラー メソッドを作成します。
雇用者コントローラー (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); } }
テスト ファイルを作成し、ロゴのアップロードなど、雇用主の作成を検証するテスト ケースを作成します。
テスト ファイルを作成します:
php artisan pest:test EmployerControllerTest
テスト ケースを作成します (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 });
ステップ 5: 害虫テストの実行
Pest テストを実行して、すべてが期待どおりに動作することを確認します。
php artisan test --testsuit=Feature
これらの手順に従うことで、Pest を使用して Laravel でテスト ケースを作成し、ファイルのアップロードの処理など、雇用主レコードの作成を検証できます。このアプローチにより、アプリケーションが期待どおりに動作することが保証され、開発プロセスの早い段階で問題を発見するのに役立ちます。テストを楽しんでください!
以上がPest を使用して Laravel でテストケースを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。