通知测试在通知测试期间未创建记录 table

Notification Testing no record created during tests in notifications table

我正在尝试测试是否在数据库中创建了通知,在我的本地,这按预期工作但是测试环境有一些奇怪的行为。

    $user->notify(new ExampleNotification());

    $this->assertDatabaseCount('notifications', 1); 
//returns green with QUEUE_CONNECTION=sync but red with QUEUE_CONNECTION=database

...

class ExampleNotification extends Notification implements ShouldBroadcast, ShouldQueue
{
    use Queueable;

    public function viaQueues(): array
    {
        return [
            'database' => 'notifications'
        ];
    }

    /**
     * Get the notification's delivery channels.
     *
     * @return array
     */
    public function via(User $notifiable): array
    { 
        return ['database']
    }

ps:我在测试中的任何地方都没有使用 Notification::fake()

有人知道为什么不同的队列连接会有不同的行为吗?

sync 之外的任何队列驱动程序都是异步工作的,即当您发送通知作业时,它将被排队,然后队列工作者将从队列中删除它,然后发送实际的通知。

这意味着如果您在测试期间发送通知,即使队列工作人员 运行 也很可能不会在测试完成之前发送通知。

为避免这种情况,您应该使用 sync 队列或使用 Notification::fake() 并检查是否已发送通知。