You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10中RefreshDatabase trait未按预期为每个测试包裹事务的问题求助

Laravel 10中RefreshDatabase trait未按预期为每个测试包裹事务的问题求助

根据RefreshDatabase文档说明:

Illuminate\Foundation\Testing\RefreshDatabase trait会在数据库架构已更新至最新时跳过迁移,转而将每个测试包裹在数据库事务中执行。

我在Laravel 10的项目里使用这个trait时,发现它并没有按预期工作,遇到了两个问题:

Problem #1

由于项目迁移执行耗时约1分钟(执行命令php artisan migrate:fresh --env testing),我本地维护了一个保持最新状态的测试数据库,本以为这样能快速运行测试,但实际测试执行总是至少需要1分钟,就像每次都在运行所有迁移一样。

Problem #2

我需要测试一段代码进入catch(Exception $e)分支的场景,这段代码会从数据库获取结果,所以我尝试在所有setUp操作后修改表名来触发异常——这一步确实成功了。
但问题来了:同一个测试类中后续测试相同代码的用例全部失败,报错信息为SQLSTATE[42S02]: Base table or view not found,这说明表名还是被修改后的错误名称。看起来似乎不是单个测试被包裹在事务中,而是整个测试类的所有测试共用了同一个事务?但这又和“之前的数据库操作(比如创建实例)不会影响后续测试”的预期相矛盾。

我实在搞不清楚哪里出了问题,希望能得到帮助。

备注:内容来源于stack exchange,提问作者fudo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 03:08:11