protonemedia/laravel-dusk-fakes

Laravel Dusk 的持久化模拟

1.6.0 2024-03-12 14:24 UTC

This package is auto-updated.

Last update: 2024-09-21 10:49:05 UTC


README

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

赞助我们

❤️ 我们自豪地通过开发 Laravel 扩展包并免费提供来支持社区。如果这个包为您节省了时间或您正在专业上依赖它,请考虑 赞助维护和开发 并查看我们最新的高级包:Inertia Table。跟踪问题和拉取请求需要时间,但我们乐于提供帮助!

安装

您可以通过 composer 安装此包

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

持久化总线(排队任务)

请确保您已将 DUSK_FAKE_BUS 环境变量设置为 trueDusk 环境 中。

最后,将 PersistentBus 特性添加到您的测试中。您不需要手动在 Bus 门面中调用 fake() 方法。

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

如果您只需要模拟特定的任务同时允许其他任务正常执行,您可以将应该被模拟的任务类名传递给 jobsToFake() 方法

Bus::jobsToFake(ShipOrder::class);

$browser->visit(...);

Bus::assertDispatched(SendOrderInvoice::class);

持久化邮件

请确保您已将 DUSK_FAKE_MAILS 环境变量设置为 trueDusk 环境 中。

最后,将 PersistentMails 特性添加到您的测试中。您不需要手动在 Mail 门面中调用 fake() 方法。

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

持久化通知

请确保您已将 DUSK_FAKE_NOTIFICATIONS 环境变量设置为 trueDusk 环境 中。

最后,将 PersistentNotifications 特性添加到您的测试中。您不需要手动在 Notification 门面中调用 fake() 方法。

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

持久化队列

请确保您已将 DUSK_FAKE_QUEUE 环境变量设置为 trueDusk 环境 中。

最后,将 PersistentQueue 特性添加到您的测试中。您不需要手动在 Queue 门面中调用 fake() 方法。

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

如果您只需要模拟特定的任务同时允许其他任务正常执行,您可以将应该被模拟的任务类名传递给 jobsToFake() 方法

Queue::jobsToFake(ShipOrder::class);

$browser->visit(...);

Queue::assertDispatched(SendOrderInvoice::class);

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

其他 Laravel 扩展包

  • Inertia Table: Inertia.js 的终极表格,内置查询构建器。
  • Laravel Blade On Demand: Laravel 扩展包,用于在内存中编译 Blade 模板。
  • Laravel Cross Eloquent Search: Laravel 扩展包,用于在多个 Eloquent 模型中搜索。
  • Laravel Eloquent Scope as Select: 停止在 PHP 中重复 Eloquent 查询作用域和约束。此扩展包允许您通过添加子查询来重用您的查询作用域和约束。
  • Laravel FFMpeg:该软件包提供了FFmpeg与Laravel的集成。文件的存储由Laravel的文件系统处理。
  • Laravel MinIO 测试工具:在MinIO S3服务器上运行您的测试。
  • Laravel Mixins:一系列Laravel的实用工具。
  • Laravel Paddle:支持webhooks/events的Paddle.com API与Laravel的集成。
  • Laravel 任务运行器:编写类似于Blade组件的Shell脚本,并在本地或远程服务器上运行它们。
  • Laravel 验证新邮箱:此软件包添加了对验证新邮箱地址的支持:当用户更新其邮箱地址时,新地址不会替换旧地址,直到新地址得到验证。
  • Laravel XSS 保护:用于保护您的应用程序免受跨站脚本(XSS)攻击的Laravel中间件。它净化请求输入,并且可以净化Blade回显语句。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件联系 pascal@protone.media 而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅 许可证文件