提问人:Majesty 提问时间:6/23/2023 更新时间:6/23/2023 访问量:26
Laravel 9:如何在单元测试期间防止急切加载?
Laravel 9: how to prevent eager loading during unit-tests?
问:
请考虑以下几点:Model
class Selection extends Model
{
use HasFactory, SoftDeletes;
protected $table = '...';
public function subjects(): HasMany
{
return $this->hasMany(SelectionSubject::class);
}
}
我急切地喜欢这样:subjects
$selection->subjects()->get()->pluck('code')->toArray()
它工作正常,除非我尝试对其进行单元测试,否则它会给我以下错误:
Illuminate\Database\QueryException : SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "subjects_table" does not exist
因此,显然它试图从数据库加载,而单元测试不存在该数据库。subjects
我尝试了以下方法:
public function boot()
{
Model::preventLazyLoading();
Model::handleLazyLoadingViolationUsing(function ($model, $relation) {
$class = get_class($model);
info("Attempted to lazy load [{$relation}] on model [{$class}].");
});
}
但是由于某种原因,它对我不起作用 - 异常没有被提出,它一直在尝试访问数据库。
关于如何在单元测试中实际防止从数据库加载的任何想法?subjects
答: 暂无答案
评论
\Tests\TestCase
TestCase