proklung/bitrix-phpunit-testing-tools

Bitrix PHPUNIT 测试工具。

1.4.9 2022-01-11 08:32 UTC

This package is auto-updated.

Last update: 2024-09-11 14:07:10 UTC


README

内部

安装

composer require --dev proklung/bitrix-phpunit-testing-tools

在依赖此包的包中,composer.json 中必须有一个部分(需要确保迁移模块安装到正确的位置)

    "extra": {
        "installer-paths": {
            "vendor/sheerockoff/bitrix-ci/files/bitrix/modules/{$name}/": ["type:bitrix-module"]
        }
    }

细节

测试的基础类 - BitrixableTestCase。启动应用于包的 Bitrix,并允许在测试中使用其 API。

数据库访问参数在基础类 BitrixableTestCasesetupDatabaseData 方法中定义。

如果数据库在启动时不存在,则将创建。

默认情况下

    protected function setupDatabaseData() : void
    {
        putenv('MYSQL_HOST=localhost');
        putenv('MYSQL_DATABASE=bitrix_ci');
        putenv('MYSQL_USER=root');
        putenv('MYSQL_PASSWORD=');
    }

可以在每个具体的测试中重写。

管理

特性 ResetDatabaseTrait

指定在每次测试之前重置数据库并重新加载。

特性 CustomDumpTrait

重置数据库并加载自定义数据库备份。

备份路径在测试的 getDumpPath 方法中指定

    protected function getDumpPath() : string
    {
        return $_SERVER['DOCUMENT_ROOT'] . '/Tests/dump/dump.sql';
    }

仅与 ResetDatabaseTrait 结合使用。

使用备份时通常会出现许可证过期的问题。在这种情况下,必须手动替换 vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main 中的 include.php 文件。

特性 SprintMigrationsTrait

使用模块 sprint.option 的迁移。

迁移目录的路径在测试的 getPathSprintMigrations 方法中指定

    protected function getPathSprintMigrations() : string
    {
        return __DIR__ . '../../../../../../Tests/sprint_migrations/';
    }
细节

由于使用 Bitrix CI 的特殊性质,必须巧妙地安装模块 - 直接在构建包的文件夹中(在 vendor/sheerockoff/bitrix-ci/files/bitrix/modules/sprint.option 中)在 composer 阶段。副作用 - 如果构建包本身更新,则迁移模块可能会丢失。

目前就是这样。

数据库会定期因到期而失效("...试用版已过期 ...")。为了修复此问题,需要启动任何带有 ResetDatabaseTrait 特性的测试,该特性将重新创建数据库。

特性 UseMigrationsTrait

指定在每次测试之前运行迁移。

底层是 的简化版本,因此也适用于来自该包的迁移。唯一的例外是,迁移不是从 Arrilot\BitrixMigrations\BaseMigrations\BitrixMigration 类继承,而是从 Arrilot\BitrixMigrationsFork\BaseMigrations\BitrixMigration 类继承。

迁移目录的路径在测试的 getMigrationsDir 方法中指定

    protected function getMigrationsDir() : string
    {
        return __DIR__ . '/../migrations';
    }

特性附带了一个用于根据模板创建迁移的辅助方法 makeMigration

    protected function makeMigration(string $name, string $template) : void

现有模板

附加特性 - CSVTrait 用于在迁移中导入 CSV 文件(Bitrix 导出格式)。

使用后,测试必须实现以下方法

  • getIblockCode() - 信息块代码;
  • getImportDefinitionSections() - 子部分定义。CSV 文件中的列号数组(IC_GROUP0 等);
  • getImportDefinitionProperties() - 属性定义。属性代码 => CSV 文件中的列号的数组;
  • getCsvPath() - CSV 文件路径;

注意! - CSV 文件中不应包含列标题行。

调用者

。根据特定需求进行了修改。

细节

使用 Prokl\BitrixTestingTools\Invokers\ComponentInvoker 类来帮助测试组件代码。

类方法

  • __constructor($componentObject) - 初始化启动组件对象;
  • init() - 初始化;
  • setParams($params) - 为启动测试组件设置参数;
  • setArParams($params) - 为启动测试组件设置 arParams;
  • setName(string $name) - 设置组件名称("test.component");
  • setTemplate($template) - 设置组件模板("test.component");
  • execute() - 执行组件(不使用模板);
  • getResultValue($name) - 返回按键 $name 的 $arResult 参数;
  • getArResult() - 返回组件工作的完整 $arResult;
  • getArResultCached() - 返回组件工作后通过 $this->__component 缓存的部分 $arResult;
  • getExecuteResult() - 当组件代码中使用 return 返回操作符时,返回组件工作结果;

示例

// ...

/**
 * @label component
 * @test
 */
public function useComponentInvoker() {
    /** @var CBitrixComponent $componentObject */
    $component = new \Prokl\BitrixTestingTools\Invokers\ComponentInvoker($componentObject);
    $component->init();
    $component->setParams(array("id" => 10));
    $component->execute();
    $this->getAssert()->equal($component->getResultValue("id"), 10, "Результат не верен");
}

测试模板适配器(result_modifier)的工作

可以使用 Prokl\BitrixTestingTools\Invokers\ResultModifierInvoker 类的对象测试组件的 result_modifier。

方法

  • __construct($componentName, $template) - 初始化对象,参数与 CMain::IncludeComponent() 方法参数相同;
  • setArResult($arResult) - 人工设置结果以传递给适配器;
  • setArParams($params) - 为启动测试组件设置 arParams;
  • execute() - 执行适配器;
  • getArResult() - 返回适配器工作的完整 $arResult;
  • getArResultCached() - 返回组件工作后通过 $this->__component 缓存的部分 $arResult;
  • getArResultValue($name) - 返回适配器工作结果按键 $name 的值;

示例

/**
 * @label component
 * @test
 */
public function modifierForSomeTemplate() {
    $rm = new \Prokl\BitrixTestingTools\Invokers\ResultModifierInvoker("project:test.with.class", "list");
    $rm->setArResult(array("id" => 10));
    $rm->execute();
    $this->getAssert()->equal($rm->getArResultValue("id"), 10, "Параметры не равны");
}

测试事件处理

Prokl\BitrixTestingTools\Invokers\EventInvoker 类简化了事件处理测试。

方法

  • __construct($module, $eventName) - 初始化事件启动对象,$module - 事件抛出模块的名称,$eventName - 事件名称;
  • setExecuteParams($params) - 将事件参数设置为数组形式,将传递给事件参数;
  • execute() - 抛出事件;
  • countOfHandlers() - 获取事件处理器的数量;
  • getEvent() - 获取事件对象;

示例

// ...

/**
 * @test
 */
public function handlersOfEventExist() {
    $eventInvoker = new \Prokl\BitrixTestingTools\Invokers\EventInvoker("main", "OnPageStart");
    $eventInvoker->setExecuteParams(array(
        "IBLOCK_ID" => 12
    ));
    $eventInvoker->execute();

    $this->getAssert()->asTrue($eventInvoker->countOfHandlers() > 1);
}

其他

  • BitrixableTestCase 类的 goTo 方法。模拟在某个 URL 上。设置与 URL 相关的所有旧内核和 D7 相关的内容。

还自动替换 $_SERVER、$_POST 等超级全局变量中的所有可能内容。

    $_GET['test'] = 'OK';

    $this->goTo('/test/');

    $url = $APPLICATION->GetCurPage(); // $url = '/test/index.php'

    $request = Application::getInstance()->getContext()->getRequest();
    $uriString = $request->getRequestUri(); // $uriString = '/test/'

    $testGetParam = $request->getQuery('test'); // $testGetParam = 'OK'