单元测试

测试插件

可以通过运行来运行单个插件测试用例winter:test 命令--p|plugin= 选项。

创建插件测试

可以通过创建一个名为的文件来测试插件phpunit.xml 在具有以下内容的基本目录中,例如在文件中/plugins/acme/blog/phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="../../../tests/bootstrap.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
>
    <testsuites>
        <testsuite name="Plugin Unit Test Suite">
            <directory>./tests</directory>
        </testsuite>
    </testsuites>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
    </php>
</phpunit>

然后一个tests/ 可以创建目录来包含测试类。文件结构应该模仿具有类的基目录Test 后缀。还建议为该类使用命名空间。

<?php namespace Acme\Blog\Tests\Models;

use Acme\Blog\Models\Post;
use PluginTestCase;

class PostTest extends PluginTestCase
{
    public function testCreateFirstPost()
    {
        $post = Post::create(['title' => 'Hi!']);
        $this->assertEquals(1, $post->id);
    }
}

测试类应该扩展基类PluginTestCase 这是一个特殊的类,它将设置存储在内存中的 Winter 数据库,作为setUp 方法。它还将刷新正在测试的插件,以及插件注册文件中定义的任何依赖项。这相当于在每次测试之前运行以下命令:

php artisan winter:up
php artisan plugin:refresh Acme.Blog
[php artisan plugin:refresh <dependency>, ...]

NOTE: 如果您的插件使用配置文件,那么你需要运行System\Classes\PluginManager::instance()->registerAll(true); 在里面setUp 你的测试方法。下面是一个基本测试用例类的示例,如果您需要测试您的插件是否与其他插件一起工作而不是单独使用,则应使用该示例。

use System\Classes\PluginManager;

class BaseTestCase extends PluginTestCase
{
    public function setUp(): void
    {
        parent::setUp();

        // Get the plugin manager
        $pluginManager = PluginManager::instance();

        // Register the plugins to make features like file configuration available
        $pluginManager->registerAll(true);

        // Boot all the plugins to test with dependencies of this plugin
        $pluginManager->bootAll(true);
    }

    public function tearDown(): void
    {
        parent::tearDown();

        // Get the plugin manager
        $pluginManager = PluginManager::instance();

        // Ensure that plugins are registered again for the next test
        $pluginManager->unregisterAll();
    }
}

更改插件测试的数据库引擎

默认情况下,Winter CMS 使用存储在内存中的 SQLite 作为插件测试环境。您可以使用环境配置文件(即创建一个config/testing/database.php 文件覆盖默认值config/database.php 文件)。

您可以覆盖/config/database.php 通过创建文件/config/testing/database.php.在这种情况下,将采用后一个文件中的变量。

系统测试

要对核心 Winter 文件执行单元测试,您应该使用 Composer 或克隆 Git 存储库下载开发副本。这将确保您拥有tests/ 运行单元测试所需的目录。

单元测试

可以通过运行来执行单元测试winter:test 命令--o|-core 选项。

功能测试

功能测试可以通过安装Winter.Dusk 在您的 Winter CMS 安装中。 Winter.Dusk 插件由 Laravel Dusk 提供支持,Laravel Dusk 是 Laravel 框架的综合测试套件,旨在通过虚拟浏览器测试与完全可操作的 Winter CMS 实例的交互。

有关安装和设置 Winter CMS 安装以运行功能测试的信息,请查看README 对于插件。

豫ICP备18041297号-2