在 Codeception bootstrap 代码中访问设置

Access settings in Codeception bootstrap code

我正在将测试从 Codeception v2 升级到 v4。 bootstrapping 代码在 acceptance.suite.yml 中被引用并且加载得很好。

_bootstrap.php 文件中可见,目前有一个变量 $settings,由周围的 Codeception 代码设置,它包含有关所有实时数据的信息,这些数据是为测试配置的运行.

这个变量现在不存在了。打印 get_defined_vars() 仅显示两个变量集,指向当前路径的字符串和 bootstrap 文件名。

如何再次访问 bootstrapping 代码中的设置?

我看过 packagist,如果有一个分离模块的候选者,那在这里会有用,但没有一个候选者看起来很有前途。

编辑:我试过手动访问设置:

$settings = \Codeception\Configuration::suiteSettings('acceptance',
    \Codeception\Configuration::config());

但是,这只允许我访问“静态”设置,即基本上按照相应的 YAML 文件中所写的设置。我需要的是“最终”设置,即评估环境后的设置。

我通过从 bootstrap 文件切换到扩展名解决了这个问题。示例:

在codeception.yml中:

extensions:
    enabled:
        - Bootstrapper

class 通过 Composer 的 class 列表功能在 lib/Bootstrapper.php 中找到,composer.json:

{
    "autoload": {
        "classmap": [
            "lib/"
        ]
    }
}

看起来像这样:

<?php

use Codeception\Events;
use Codeception\Extension;

class Bootstrapper extends Extension {

    public static $events = [
        Events::SUITE_BEFORE => 'beforeSuite',
    ];

    public function beforeSuite() {
        $module = 'PhpBrowser';
        if ($this->hasModule('WebDriver')) {
            $module = 'WebDriver';
        }

        /* expose info, if we're in real-browser context */
        define('IS_REAL_BROWSER', $module === 'WebDriver');

        /* make sure the helper functions are loaded */
        require_once __DIR__.'/../tests/acceptance/_helpers.php';
    }
}