【发布时间】:2018-07-04 20:39:54
【问题描述】:
**我在 Laravel 5.3 中有以下 Test 类,你可以看到 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()
{
//
}
}
环境: Laravel 5.3, 测试数据库:sqlite - 内存 phpunit 4.8.36 php - 7 PHPUnit 配置
<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>
编辑:我在新数据库上的迁移工作正常,甚至向上和回滚
【问题讨论】:
标签: mysql laravel sqlite phpunit