Git Product home page Git Product logo

laravel-dusk-fakes's Introduction

Laravel Dusk Fakes

Latest Version on Packagist run-tests Total Downloads Buy us a tree

Sponsor this package!

❤️ 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. Keeping track of issues and pull requests takes time, but we're happy to help!

Installation

You can install the package via composer:

composer require protonemedia/laravel-dusk-fakes --dev

Persist Bus (queued jobs)

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);

Persist Mails

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);
            });
        });
    }
}

Persist Notifications

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);
        });
    }
}

Persist Queue

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);

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Other Laravel packages

  • 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.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

laravel-dusk-fakes's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar pascalbaljet avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.