dees040/festing

通过Festing,您的Laravel单元测试速度可以提高100%以上

1.0.6 2020-03-04 15:27 UTC

This package is auto-updated.

Last update: 2024-09-05 00:50:37 UTC


README

Latest Stable Version Total Downloads Build status

Festing是一个非常非常棒的名称,由fast(快速)和testing(测试)两个词组合而成。因为这个包就是为此而生的。在Laravel中实现更快的测试。这个包受到了Nate Denlinger一篇优秀文章的启发:Nate Denlinger的文章

Festing之前

Before fast database tests

Festing之后

After fast database tests

安装

在现有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数组配置值。