❤️ We proudly support the community by developing Laravel packages and giving them away for free. If this package saves you time or if you're relying on it professionally, please consider sponsoring the maintenance and development and check out our latest premium package: Inertia Table. Keeping track of issues and pull requests takes time, but we're happy to help!
You can install the package via composer:
composer require protonemedia/laravel-dusk-fakes --dev
Make sure you've set the DUSK_FAKE_BUS
environment variable to true
in the Dusk environment.
Finally, add the PersistentBus
trait to your test. You don't have to manually call the fake()
method on the Bus
facade.
<?php
namespace Tests\Browser\Auth;
use App\Jobs\SendOrderInvoice;
use App\Models\Order;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Support\Facades\Mail;
use Laravel\Dusk\Browser;
use ProtoneMedia\LaravelDuskFakes\Bus\PersistentBus;
use Tests\DuskTestCase;
class OrderInvoiceTest extends DuskTestCase
{
use DatabaseMigrations;
use PersistentBus;
public function test_dispatch_invoice_job_after_confirming_order()
{
$this->browse(function (Browser $browser) {
$order = Order::factory()->create();
$browser->visit('/order/'.$order->id)
->press('Confirm')
->waitForText('We will generate an invoice!');
Bus::assertDispatched(SendOrderInvoice::class);
});
}
}
If you only need to fake specific jobs while allowing your other jobs to execute normally, you may pass the class names of the jobs that should be faked to the jobsToFake()
method:
Bus::jobsToFake(ShipOrder::class);
$browser->visit(...);
Bus::assertDispatched(SendOrderInvoice::class);
Make sure you've set the DUSK_FAKE_MAILS
environment variable to true
in the Dusk environment.
Finally, add the PersistentMails
trait to your test. You don't have to manually call the fake()
method on the Mail
facade.
<?php
namespace Tests\Browser\Auth;
use App\Mail\OrderConfirmed;
use App\Models\Order;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Support\Facades\Mail;
use Laravel\Dusk\Browser;
use ProtoneMedia\LaravelDuskFakes\Mails\PersistentMails;
use Tests\DuskTestCase;
class OrderConfirmTest extends DuskTestCase
{
use DatabaseMigrations;
use PersistentMails;
public function test_send_order_confirmed_mailable_to_user()
{
$this->browse(function (Browser $browser) {
$order = Order::factory()->create();
$browser->visit('/order/'.$order->id)
->press('Confirm')
->waitForText('We have emailed your order confirmation!');
Mail::assertSent(OrderConfirmed::class, function ($mail) use ($user) {
return $mail->hasTo($user->email);
});
});
}
}
Make sure you've set the DUSK_FAKE_NOTIFICATIONS
environment variable to true
in the Dusk environment.
Finally, add the PersistentNotifications
trait to your test. You don't have to manually call the fake()
method on the Notification
facade.
<?php
namespace Tests\Browser\Auth;
use App\Models\User;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Support\Facades\Notification;
use Laravel\Dusk\Browser;
use ProtoneMedia\LaravelDuskFakes\Notifications\PersistentNotifications;
use Tests\DuskTestCase;
class PasswordResetTest extends DuskTestCase
{
use DatabaseMigrations;
use PersistentNotifications;
public function test_reset_password_link_can_be_requested()
{
$this->browse(function (Browser $browser) {
$user = User::factory()->create();
$browser->visit('/forgot-password')
->type('email', $user->email)
->press('Email Password Reset Link')
->waitForText('We have emailed your password reset link!');
Notification::assertSentTo($user, ResetPassword::class);
});
}
}
Make sure you've set the DUSK_FAKE_QUEUE
environment variable to true
in the Dusk environment.
Finally, add the PersistentQueue
trait to your test. You don't have to manually call the fake()
method on the Queue
facade.
<?php
namespace Tests\Browser\Auth;
use App\Jobs\SendOrderInvoice;
use App\Models\Order;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Support\Facades\Mail;
use Laravel\Dusk\Browser;
use ProtoneMedia\LaravelDuskFakes\Queue\PersistentQueue;
use Tests\DuskTestCase;
class OrderInvoiceTest extends DuskTestCase
{
use DatabaseMigrations;
use PersistentQueue;
public function test_dispatch_invoice_job_after_confirming_order()
{
$this->browse(function (Browser $browser) {
$order = Order::factory()->create();
$browser->visit('/order/'.$order->id)
->press('Confirm')
->waitForText('We will generate an invoice!');
Queue::assertDispatched(SendOrderInvoice::class);
});
}
}
If you only need to fake specific jobs while allowing your other jobs to execute normally, you may pass the class names of the jobs that should be faked to the jobsToFake()
method:
Queue::jobsToFake(ShipOrder::class);
$browser->visit(...);
Queue::assertDispatched(SendOrderInvoice::class);
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details.
Inertia Table
: The Ultimate Table for Inertia.js with built-in Query Builder.Laravel Blade On Demand
: Laravel package to compile Blade templates in memory.Laravel Cross Eloquent Search
: Laravel package to search through multiple Eloquent models.Laravel Eloquent Scope as Select
: Stop duplicating your Eloquent query scopes and constraints in PHP. This package lets you re-use your query scopes and constraints by adding them as a subquery.Laravel FFMpeg
: This package provides an integration with FFmpeg for Laravel. The storage of the files is handled by Laravel's Filesystem.Laravel MinIO Testing Tools
: Run your tests against a MinIO S3 server.Laravel Mixins
: A collection of Laravel goodies.Laravel Paddle
: Paddle.com API integration for Laravel with support for webhooks/events.Laravel Task Runner
: Write Shell scripts like Blade Components and run them locally or on a remote server.Laravel Verify New Email
: This package adds support for verifying new email addresses: when a user updates its email address, it won't replace the old one until the new one is verified.Laravel XSS Protection
: Laravel Middleware to protect your app against Cross-site scripting (XSS). It sanitizes request input, and it can sanatize Blade echo statements.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.