protonemedia / laravel-dusk-fakes
Laravel Dusk 的持久化模拟
Requires
- php: ^8.2|^8.3
- illuminate/contracts: ^10.0|^11.0
- laravel/dusk: ^7.0|^8.0
- spatie/invade: ^1.1
Requires (Dev)
- laravel/pint: ^1.0
- nesbot/carbon: ^2.66
- nunomaduro/collision: ^7.0|^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpunit/phpunit: ^10.4
This package is auto-updated.
Last update: 2024-09-21 10:49:05 UTC
README
赞助我们
❤️ 我们自豪地通过开发 Laravel 扩展包并免费提供来支持社区。如果这个包为您节省了时间或您正在专业上依赖它,请考虑 赞助维护和开发 并查看我们最新的高级包:Inertia Table。跟踪问题和拉取请求需要时间,但我们乐于提供帮助!
安装
您可以通过 composer 安装此包
composer require protonemedia/laravel-dusk-fakes --dev
持久化总线(排队任务)
请确保您已将 DUSK_FAKE_BUS
环境变量设置为 true
在 Dusk 环境 中。
最后,将 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
环境变量设置为 true
在 Dusk 环境 中。
最后,将 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
环境变量设置为 true
在 Dusk 环境 中。
最后,将 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
环境变量设置为 true
在 Dusk 环境 中。
最后,将 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)。有关更多信息,请参阅 许可证文件。