Laravel
Beginner
1 min read
Testing with actingAs, Mocking, and Fakes
Example
<?php
// tests/Feature/OrderTest.php
namespace Tests\Feature;
use App\Jobs\ProcessOrder;
use App\Mail\OrderConfirmation;
use App\Models\Order;
use App\Models\User;
use App\Notifications\OrderShipped;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\Queue;
use Tests\TestCase;
class OrderTest extends TestCase
{
use RefreshDatabase;
public function test_placing_an_order_dispatches_job_and_sends_email(): void
{
Queue::fake();
Mail::fake();
Notification::fake();
$user = User::factory()->create();
$response = $this->actingAs($user, 'sanctum')
->postJson('/api/v1/orders', ['product_id' => 1, 'quantity' => 2]);
$response->assertCreated();
Queue::assertPushed(ProcessOrder::class, function ($job) use ($user) {
return $job->order->user_id === $user->id;
});
Mail::assertQueued(OrderConfirmation::class, fn($mail) =>
$mail->hasTo($user->email)
);
Notification::assertSentTo($user, OrderShipped::class);
}
}
Related Resources
Laravel Reference
Complete tag & property list
Laravel How-To Guides
Step-by-step practical guides
Laravel Exercises
Practice what you've learned
More in Laravel