speicher210/functional-test-bundle

Symfony 功能测试包

安装次数: 52,798

依赖: 2

建议者: 2

安全: 0

星级: 5

关注者: 5

分支: 6

开放问题: 3

类型:symfony-bundle

1.1.3 2022-03-31 15:27 UTC

README

简介

此包提供基础类和功能,用于编写和运行功能测试,重点关注测试REST端点。它提供设置测试数据库和加载固定数据以及模拟DI(即使是私有服务)的帮助。

安装

下载包

$ composer require --dev speicher210/functional-test-bundle

启用包

Symfony

<?php
// config/bundles.php

return [
    // ...
    Speicher210\FunctionalTestBundle\Speicher210FunctionalTestBundle::class => ['dev' => true, 'test' => true],
    // ...
];

基本用法

PHPUnit引导

<?php

declare(strict_types=1);

require dirname(__DIR__) . '/config/bootstrap.php';
require_once dirname(__DIR__) . '/vendor/speicher210/functional-test-bundle/src/Test/bootstrap.php';

// $kernel variable will contain the current Kernel instance
<?php

declare(strict_types=1);

use Speicher210\FunctionalTestBundle\Test\RestControllerWebTestCase;
use Symfony\Component\HttpFoundation\Request;

final class MyUserEndpointTest extends RestControllerWebTestCase
{
    public function testReturn404IfUserIsNotFound() : void
    {
        $this->assertRestRequestReturns404('/api/user/1', Request::METHOD_GET);
    }

    public function testReturns200AndUserData() : void
    {
        $this->assertRestGetPath('/api/user/1');
    }
}

断言是通过快照进行比较完成的。默认情况下,框架将在 Expected 目录(测试类所在的目录)中查找与测试同名的文件,并附加 -1.json 后缀。

预期输出示例可以是: Expected/testReturns200AndUserData-1.json

{
  "id": "1",
  "first_name": "John",
  "last_name": "Doe",
  "email": "@string@",
  "sign_up_date_time": "@string@.isDateTime()"
}

在每个测试下的每个REST断言中,预期文件中的 -1.json 后缀将递增。在预期文件中可以使用 coduo/php-matcher 的任何功能。

在测试执行期间,可以通过添加此扩展到您的phpunit配置来自动更新预期文件的内容。

<extensions>
    <extension class="Speicher210\FunctionalTestBundle\Extension\RestRequestFailTestExpectedOutputFileUpdater" />
</extensions>

使用Doctrine固定数据加载固定数据。默认情况下,框架将在 Fixtures 目录(测试类所在的目录)中查找与测试同名的PHP文件。此文件必须返回一个扩展 Speicher210\FunctionalTestBundle\Test\Loader\AbstractLoader 类的类名数组。固定文件示例可以是

<?php
// Fixtures/testReturns200AndUserData.php

return [
    \App\Tests\Fixtures\Loader\LoadOneUser::class
];

为了重建和重置数据库,您需要为PHPUnit创建一个引导文件。在您自己的引导文件中,您可以包含 Test/bootstrap.php 文件,这将重置测试数据库。数据库不会在每次测试时重建,而是在测试开始时只重建一次。这意味着必须在运行下一个测试之前删除数据。这可以通过在事务中运行测试来实现。为此,请将扩展添加到您的phpunit配置中

<extensions>
    <extension class="DAMA\DoctrineTestBundle\PHPUnit\PHPUnitExtension" />
</extensions>

访问和模拟服务

可以通过使用以下方法实现服务的模拟:

<?php

$this->mockContainerService('my_service_id', $myServiceMock);

服务也可以通过使用以下方法访问

<?php

$this->getContainerService('my_service_id');