gpt4 book ai didi

mysql - 一个空的 tearDown 方法使 phpunit 测试通过

转载 作者:可可西里 更新时间:2023-11-01 08:38:59 26 4
gpt4 key购买 nike

**我在 Laravel 5.3 中有以下测试类,你可以看到 tearDown() 方法是空的,我在内存中使用 sqlite 进行测试。现在测试通过了,但是当我删除空的 tearDown() 方法时,它会抛出一个 foreign key contraint failed exception,我正在使用 sqlite 进行测试,phpunit.xml 配置如下。我尝试将测试数据库更改为 mysql,那时一切正常(即使没有 tearDown())。知道为什么缺少 tearDown() 方法会导致错误吗?

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Database\Eloquent\Model;
use App\Country;

class PhoneTest extends TestCase
{
use DatabaseMigrations;

public function setUp()
{
parent::setUp();

Schema::disableForeignKeyConstraints();

$this->seed(LocationsSeeder::class);

Schema::enableForeignKeyConstraints();
}

public function test_we_can_make_number_international()
{
$phoneService = resolve('Phone');
$international = $phoneService->makeInternational('0507639889', Country::find(1));

return $this->assertEquals($international, '+971507639889');
}


protected function tearDown()
{
//
}
}

环境:拉维尔 5.3,测试数据库:sqlite - 在内存中phpunit 4.8.36PHP-7PHPUnit 配置

 <php>
<env name="APP_ENV" value="testing"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
</php>

编辑:我在新数据库上的迁移工作正常,甚至可以启动和回滚

最佳答案

由于您正在使用 DatabaseMigrations 特性,Laravel 会尝试执行 migrate:rollback 命令:

 $this->beforeApplicationDestroyed(function () {
$this->artisan('migrate:rollback');
});

并且由于您的迁移很困惑(这就是您关闭 FK 约束的原因),它失败了。

当您放置 tearDown() 方法时,您将覆盖父级 Illuminate\Foundation\Testing\TestCase< 中的 tearDown() 方法 类,所以永远不会执行 beforeApplicationDestroyed 回调。

处理此问题的最佳方法是在每次迁移中修复 down() 方法,这样每个表都可以在 migrate:rollback 命令执行时被删除。但你也可以运行 migrate:reset来自 tearDown() 方法。或者像在 setUp() 方法中那样使用 disableForeignKeyConstraints() 禁用 FK 约束。

关于mysql - 一个空的 tearDown 方法使 phpunit 测试通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com