【问题标题】:Access settings in Codeception bootstrap codeCodeception 引导代码中的访问设置
【发布时间】:2020-05-11 09:06:18
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: php testing codeception


    【解决方案1】:

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

    在 codeception.yml 中:

    extensions:
        enabled:
            - Bootstrapper
    

    该课程通过 Composer 的课程列表功能composer.jsonlib/Bootstrapper.php 中找到:

    {
        "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';
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-28
      • 2023-04-04
      • 2011-11-11
      • 2023-03-22
      • 1970-01-01
      • 2021-10-28
      • 2013-12-20
      • 2013-11-15
      相关资源
      最近更新 更多