【发布时间】:2019-11-17 12:23:54
【问题描述】:
我正在为一个项目编写一些 PHPUnit 功能测试,这是姗姗来迟。其中之一命中了许多修改数据库的路由 - 直到现在,我一直在其中一些路由中使用数据库事务。
如果我在测试中使用 RefreshDatabase 或 DatabaseTransactions 特征,它会失败并出现一个奇怪的错误:
Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\Models\ClassM]
如果我删除特征(因此数据将保持不变),则测试通过。
我检查并从相关路由中删除了我的所有数据库事务,现在测试确实通过RefreshDatabase。
我怀疑问题在于 MySQL 不支持嵌套事务,并且这两个特征都使用事务。但这意味着,如果我想使用 RefreshDatabase 运行测试(迄今为止最好的选择!),我根本无法在我的代码中使用事务。
正确吗?这似乎是一个主要限制。
【问题讨论】:
标签: mysql laravel laravel-5 transactions phpunit