单元测试
测试插件
可以通过运行来运行单个插件测试用例这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 对于插件。