speicher210 / functional-test-bundle
Symfony 功能测试包
1.1.3
2022-03-31 15:27 UTC
Requires
- php: ~7.2 || ~8.0
- ext-json: *
- coduo/php-matcher: ^5.0 || ^6.0
- dama/doctrine-test-bundle: ^6.0
- doctrine/data-fixtures: ^1.4.1
- doctrine/doctrine-fixtures-bundle: ^3.1
- doctrine/orm: ^2.7
- phpunit/phpunit: ^8.0|^9.0
- symfony/browser-kit: ^4.4 || ^5.1
- symfony/css-selector: ^4.4 || ^5.1
- symfony/framework-bundle: ^4.4 || ^5.1
Requires (Dev)
- ext-imagick: *
- doctrine/coding-standard: ^8.0
- lexik/jwt-authentication-bundle: ^2.5
- mikey179/vfsstream: ^1.6
- phpstan/phpstan: ^0.12.54
- phpstan/phpstan-phpunit: ^0.12.16
- phpstan/phpstan-strict-rules: ^0.12.5
- symfony/console: ^4.4 || ^5.1
- symfony/security: ^4.4 || ^5.1
Suggests
- ext-imagick: To assert images and create fixture images
- mikey179/vfsstream: To mock uploading large files
- symfony/console: To use command line tool to generate tests stubs
- symfony/security: To mock authentication
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');