dees040 / festing
通过Festing,您的Laravel单元测试速度可以提高100%以上
Requires
- illuminate/container: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*
- illuminate/support: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*
Requires (Dev)
- orchestra/testbench: 3.5.*|3.6.*|3.7.*
- phpunit/phpunit: 6.0.*|7.0.*|8.0.*|9.0.*
README
Festing是一个非常非常棒的名称,由fast(快速)和testing(测试)两个词组合而成。因为这个包就是为此而生的。在Laravel中实现更快的测试。这个包受到了Nate Denlinger一篇优秀文章的启发:Nate Denlinger的文章。
Festing之前
Festing之后
安装
在现有Laravel项目中安装和设置时间估计约为5分钟,在新项目中约为2分钟。通过composer安装此包。
composer require --dev dees040/festing
如果您使用的是Laravel >= 5.5,则此包将自动添加到您的providers列表中。如果使用较低版本,请将服务提供程序添加到config/app.php中的providers数组中。
Dees040\Festing\ServiceProvider::class,
现在您已经准备好进行设置了。
此包包含一个小型配置文件。在大多数情况下,默认配置应该很好。但是,您可以随时修改它。要发布配置文件,请运行以下命令
php artisan vendor:publish --provider="Dees040\Festing\ServiceProvider" --tag="config"
设置
首先,您应该更新database.php配置文件。我们应该添加一个专门用于测试的连接。您可以使用以下数组。
'testing' => [ 'driver' => 'sqlite', 'database' => database_path('testing.sqlite'), 'prefix' => '', ],
在包配置中,您可以指定在测试时使用哪个连接。默认情况下,它将使用我们刚刚添加到connections数组的testing连接。您还应在phpunit.xml文件中位于<php>标签内的该部分中添加或更新此设置。
<env name="DB_CONNECTION" value="testing"/>
由于Laravel没有启动测试特性(如模型特性)的选项,我们需要在tests/TestCase.php文件中添加一些功能。如果您还没有覆盖setUpTraits()方法,您可以将以下内容添加到TestCase.php中。
use Dees040\Festing\FestTheDatabase; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase { use CreatesApplication, FestTheDatabase; /** * Boot the testing helper traits. * * @return array */ protected function setUpTraits() { $uses = parent::setUpTraits(); if (isset($uses[\Dees040\Festing\ShouldFest::class])) { $this->runFester(); } return $uses; }
如果您已经覆盖了setUpTraits()方法,只需将if语句添加到方法体中。**此外,您的TestCase.php应使用FestTheDatabase特性。**在示例目录中,您可以查看一个示例TestCase.php和单元测试。
在测试用例中
为了实际执行数据库刷新器,您需要在测试用例中使用ShouldFest特性。这个特性与ShouldQueue接口类似,只有在检测到时才会执行代码。它也替换了Laravel中的RefreshDatabase特性。
<?php namespace Tests\Unit; use Tests\TestCase; use Dees040\Festing\ShouldFest; class ExampleTest extends TestCase { use ShouldFest; /** * A basic test example. * * @return void */ public function testBasicTest() { $this->assertTrue(true); } }
命令
此包包含一个命令(make:fest),与php artisan make:test相同。唯一的区别在于它使用的是ShouldFest特性,而不是Laravel提供的默认RefreshDatabase特性。
配置
请查看配置文件以获取有关所有配置的说明。
缓存数据
在我们将数据缓存以提高测试速度之前,我们运行一系列Artisan命令。默认情况下,我们运行php artisan migrate。但是,如果您想更改此设置或想运行更多命令(例如php artisan db:seed),您可以更改commands数组配置值。