我有一个Laravel 5应用程序正在开发中,它有两个测试套件:Unit
和Functional
。我在phpunit.xml
定义了这些:在套件中的每个测试之前运行设置代码
<testsuite name="Unit">
<directory>./tests/unit</directory>
</testsuite>
<testsuite name="Functional">
<directory>./tests/functional</directory>
</testsuite>
对于功能测试正常运行,他们需要有一个有效的数据库对着干。这意味着在运行功能测试之前执行一些设置以迁移数据库。
通常我会在我的测试中使用DatabaseMigrations
特征来确保数据库在每次测试之前迁移。不幸的是,这会显着降低我们的测试(我们有数百个)。我将测试切换到使用DatabaseTransactions
特征,这使得它们运行得更快,但是现在在运行测试之前数据库不会被迁移。如果我在项目的新克隆上运行测试套件,它会失败,因为在运行功能测试套件之前我没有迁移数据库。
明显的解决方案是将$this->artisan('migrate');
添加到setUp
方法tests/TestCase.php
。但这有两个问题:
这会导致数据库在每次测试之前迁移,这正是我试图避免的原因。
这也试图在运行单元测试套件时迁移数据库,这显然不理想。
什么是对我最好的方式,以确保为功能测试数据库迁移任何测试运行之前,但只适用于功能测试?
好主意。我最终创建了一个FunctionalTestCase,只有我的功能测试可以扩展,它负责处理任何数据库设置。谢谢! –