Laravel 在我们的测试中,我们是否也应该使用那些仅用于更改数据库中数据的迁移?
我们有一系列迁移(200+),其中大多数迁移都是为了更改数据库中的数据,这会影响我们的测试。例如,我们有一个这样的迁移Laravel 在我们的测试中,我们是否也应该使用那些仅用于更改数据库中数据的迁移?,laravel,unit-testing,testing,migration,functional-testing,Laravel,Unit Testing,Testing,Migration,Functional Testing,我们有一系列迁移(200+),其中大多数迁移都是为了更改数据库中的数据,这会影响我们的测试。例如,我们有一个这样的迁移 public function up() { $deleteId = DB::table('lookups') ->where('code', '=', 'VI') ->where('type', '=', 'country') ->where('value',
public function up()
{
$deleteId = DB::table('lookups')
->where('code', '=', 'VI')
->where('type', '=', 'country')
->where('value', '=', 'U.S. Virgin Islands')
->first(['id'])->id;
DB::table('lookups')
->where('id', '=', $deleteId ?? 0)
->update(['deleted_at' => Carbon::now()->toDateTimeLocalString()]);
}
如您所见,如果我们在测试环境中运行它,这将抛出一个错误。因为测试环境中不存在该记录。(我们正为此目的使用faker)。我的问题是,我们应该如何跳过这种迁移,或者最好的解决方案是什么。我将在我的回答中做出一些假设,因此请检查这些假设,如果有任何假设不正确,请告诉我
你在模拟对数据库的调用吗?如果是这样的话,您是否尝试过模拟对该函数的调用,并从本质上说使其成为无操作?您可以在一个查询中完成,然后它不会抛出。