首页 > 解决方案 > Codeception 引导代码中的访问设置

问题描述

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

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

这个变量现在消失了。打印get_defined_vars()只显示两个变量集,指向当前路径的字符串和引导文件名。

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

我看过 packagist,如果有一个分离模块的候选者,这将在这里使用,但没有一个候选者看起来很有希望。

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

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

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

标签: phptestingcodeception

解决方案


我通过从引导文件切换到扩展解决了这个问题。例子:

在 codeception.yml 中:

extensions:
    enabled:
        - Bootstrapper

该类是lib/Bootstrapper.php通过 Composer 的类列表功能找到的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';
    }
}

推荐阅读