在 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';
}
}
我正在将测试从 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';
}
}