【发布时间】:2017-05-02 16:00:54
【问题描述】:
我有一个正在开发的 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'); 添加到tests/TestCase.php 的setUp 方法中。但这有两个问题:
这会导致在每次测试之前迁移数据库,这是我一开始就试图避免的。
这也尝试在运行单元测试套件时迁移数据库,这显然不理想。
对我来说,确保在运行任何测试之前迁移功能测试数据库的最佳方法是什么,但仅限于功能测试?
【问题讨论】:
标签: php laravel unit-testing testing laravel-5