dragonmantank / alliance
PHPUnit 扩展,用于添加数据库功能
Requires
- php: ~7.2
- doctrine/dbal: ^2.10
- phpunit/phpunit: ^8.0
- symfony/yaml: ^5.0
This package is auto-updated.
Last update: 2024-08-29 05:24:39 UTC
README
Alliance 是一个 PHPUnit 扩展,它添加了在集成和功能测试中使用数据库的功能。这将自动在测试运行之间清理和运行数据库迁移,并为检查数据库中的数据提供额外的断言。
此扩展不是用来替代单元测试的,而是在实际需要执行数据库测试时作为补充。使用 Alliance 的测试将比传统的单元测试慢。
安装
安装通过 Composer 完成,并应作为开发需求添加
composer require --dev dragonmantank/alliance
Alliance 需要 PHPUnit 8.0 和 PHP 7.2 或更高版本。
配置
Alliance 通过您的项目 phpunit.xml
文件以及您的迁移库已使用的配置设置进行配置。这允许您在应用程序的预期位置维护您的数据库设置,而 Alliance 将吸收这些设置以完成其工作。
在大多数情况下,您需要在 phpunit.xml
文件中添加一个新的 <extensions>
块,并修改配置选项。每个迁移库插件都将有其自己的配置集。
更多信息可以在 PHPUnit 手册的"配置扩展"部分中找到。
配置 Phinx
<extensions> <extension class="Alliance\DbTester"> <arguments> <string>phinx</string> <array> <!-- Config file path is relative to the phpunit.xml file --> <element key="config_file"><string>phinx.yml</string></element> <!-- Environment block to read from your config file --> <element key="environment"><string>testing</string></element> </array> </arguments> </extension> </extensions>
用法
您只需要将您的扩展改为 Alliance\DbTestCase
而不是 PHPUnit\Framework\TestCase
。这将允许扩展检测需要运行数据库机制。
namespace MyAppTest; use Alliance\DbTestCase; class FooTest extends DbTestCase { }
Alliance\DbTestCase
将公开一些数据库特定的断言,您可以在测试中使用这些断言。
新断言
assertNotInTable(string $table, array $query)
确保指定的行不在指定的表中存在。 $query
是一个包含列和值的数组,将用于构建 AND 查询以检查该行。
$this->assertNotInTable('posts', ['title' => 'My Post title']);
assertSingleRowInTable(string $table, array $query)
确保指定的行确实存在于指定表中作为单行。 $query
是一个包含列和值的数组,将用于构建 AND 查询以检查该行。
与查询匹配的多行将导致此断言失败,因此请确保您的查询尽可能具体。
$this->assertSingleRowInTable( 'posts', [ 'id' => $post->id, 'title' => $post->title, 'slug' => $post->slug ] );
支持的迁移库
许可
在Apache License 2.0许可下发布