dragonmantank/alliance

PHPUnit 扩展,用于添加数据库功能

dev-master 2020-01-29 03:01 UTC

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许可下发布