运行 Laravel 使用 PHPUnit 进行测试,排队的作业似乎总是 运行 处于同步模式。如何以标准模式调度它们?

Running Laravel tests with PHPUnit, queued jobs seem to always run in sync mode. How to dispatch them in standard mode?

运行 Laravel 7 使用 'database' 驱动程序的作业队列。

前端调用 API 调度作业,并立即 return 返回状态为(已排队)的响应。当从前端 Javascript.

调用时,这工作正常

尝试用 PHPUnit 测试同一个端点,通过调用同一个 API 端点的测试,我发现作业似乎是在同步模式下分派的,即 HTTP 响应直到作业已完成,因为 ->dispatch() 方法在此之前不会 return。

两个测试都使用完全相同的开发环境——一个运行异步,另一个运行同步。

在文档中看不到任何关于此的信息。 运行 PHPUnit 时如何使作业异步排队,以便我们可以测试预期的行为?

您始终可以覆盖 phpunit.xml 文件中的 .env 配置。

<server name="QUEUE_CONNECTION" value="a_different_connection"/>

我个人更喜欢在我的测试套件中使用 sync 连接,以确保一切正常。

也可以用Queue::fake(),上面评论里有提到