通知测试在通知测试期间未创建记录 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()
并检查是否已发送通知。
我正在尝试测试是否在数据库中创建了通知,在我的本地,这按预期工作但是测试环境有一些奇怪的行为。
$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()
并检查是否已发送通知。