在测试 Laravel 时有没有办法伪造特定的事件监听器?

Posted

技术标签:

【中文标题】在测试 Laravel 时有没有办法伪造特定的事件监听器?【英文标题】:Is there a way to fake specific event listeners when testing Laravel? 【发布时间】:2021-11-03 05:47:55 【问题描述】:

我有一个包含多个侦听器的事件,其中一个会发送通知。我想在不运行不相关的侦听器的情况下对其进行测试。

// EventServiceProvider

protected $listen = [

    ProductionStarted::class => [
        StartOtherTasks::class,
        SendNotifications::class,
    ],
];

这是来自测试的 sn-p。调度事件时的问题是,它的所有侦听器都在运行(在这种情况下为StartOtherTasks侦听器)我不希望它侦听。

public function test_starting_production_sends_notification()

    event(new ProductionStarted());

    Notification::fake();

    Notification::assertSentTo(
        $notifiable,
        NotifyBatchStarted::class,
    );

【问题讨论】:

这对您有帮助吗? laracasts.com/discuss/channels/testing/… 你不这样做,你只是做一个功能测试并伪造事件,所以它不会触发监听器,如果你想专门测试一个监听器,你只需创建一个单元测试并运行在测试中监听事件,就是这样! 【参考方案1】:

你可以像这样触发一个特定的监听器

$listener = new StartOtherTasks();
$listener->handle(new ProductionStarted());

【讨论】:

以上是关于在测试 Laravel 时有没有办法伪造特定的事件监听器?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Laravel 5.8 中测试 Eloquent Observers?

有没有办法在 Flutter 测试中伪造 DateTime.now() ?

如何以编程方式将触摸事件伪造为 UIButton?

想测试 laravel 中工厂创建的特定方法的调用

iOS:有没有办法伪造用户的语言环境?

运行 Xamarin.UITests 时有没有办法让应用程序选择语言或文化