php - 如何在 laravel 中为手动注册事件监听器添加测试?

标签 php laravel phpunit laravel-7

我有一个手动注册的事件和相关的监听器。为此,我想添加测试,所以我在文档中检查了 laravel Mocking Test,但我没有找到任何方法来测试使用参数监听器手动注册事件。所以有人帮我怎么做吗?下面我附上了工作相关的代码。

事件正在 TeamObserver deleting 方法中调用,如下所示

class TeamObserver
{
    public function deleting(Team $team)
    {
    event('event.team.deleting', array('team' => $team));
    }
}

事件和监听器在 EventServiceProvider boot 方法中注册,如下所示

public function boot()
{
    parent::boot();
    Event::listen(
        'event.team.deleting',
        'Listeners\TeamDeletingListener'
    );
}

TeamDeletingListener 如下所示

class TeamDeletingListener
{
    public function handle($team)
    {
        \Log::info('Deleting Inventory Module');
        \Log::info($team);
    }
}

最佳答案

做到这一点的最简单方法是用一个模拟的替换您的监听器的真实实现。这是一个示例测试。如果您删除 event('event.team.deleting', array('team' => $team)); 或传递不同的团队,它将失败。如果我没猜错,这就是您想要实现的目标。

public function testTeamDeletion()
{
    // Persist team that should be deleted
    $team       = new Team();
    $team->name = 'My Team';
    $team->save();

    // Mock the listener
    $this->mock(
        TeamDeletingListener::class,
        function (MockInterface $mock) use ($team) {
            // Expectation
            $mock->shouldReceive('handle')
                ->with($team)
                ->once();
        }
    );

    // Delete team
    $team->delete();
}

关于php - 如何在 laravel 中为手动注册事件监听器添加测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62618059/

相关文章:

php - MySql - 加入另一个多行表,将查询插入另一个查询?

php - MySQL 的 AJAX HTTP 请求问题

mysql - 外部约束是错误形成的问题(laravel)

laravel - 如何在 Laravel 8 中获取作业批处理列表

zend-framework - Zend Framework (PHPUnit) 测试无法运行 (phpunit : command not found/Class 'PHPUnit_Framework_TestCase' not found)

php - 从 php 执行时 Wkhtmltopdf 无法解析主机

javascript - 如何隐藏多个具有相同 id 的 div?

laravel - 从 Laravel 4 中的 MSSQL 存储过程读取多个结果集

symfony - Symfony2 测试中的数据库清理

Symfony 和 PhpUnit 内存泄漏