Behat 3 - 如何在上下文中检索自定义扩展

2024-04-10

我需要添加,然后从上下文中从 behat.yml 文件检索额外的选项/配置。

Behat 不允许我将一些随机参数添加到 behat.yml 文件中,因此我创建了新的自定义扩展。此扩展允许我传递特定的配置值

extensions:
    App\Behat\DevToolsExtension:
        api_url: "https://api.example.com"

所以现在 behat 不会抱怨 behat.yml 文件中的新配置。

现在我被困住了。如何在运行时从我的扩展中检索此配置?

我在公共函数 load(ContainerBuilder $container, array $config) 方法中设置扩展中的现有参数,如下所示:

$container->setParameter($configKey . $key, $config[$key]);

同样,有没有办法在 Context 中检索这个 ContainerBuilder 对象或 DevToolsExtension 对象?

Edit

解决方案是创建服务容器并将行为 ContainerBuilder 传递到其中,如下所示:

class AppExtension implements ExtensionInterface
{
    // ...
    public function load(ContainerBuilder $container, array $config)
    {
        $configKey = $this->getConfigKey() . '.';

        foreach ($this->keys as $key) {
            $keyValue = $configKey . $key;
            $container->setParameter($keyValue, $config[$key]);
        }

        $this->getServiceLocator()->setBehatContainer($container);
    }

然后使用服务定位器检索配置参数

$value = $this->getBehatContainer()->getParameter($key);

我遇到了这个问题并为项目解决了这个问题:剪贴板 https://github.com/timiTao/BehatClipboard

当然,正在开发 ~v3.0 可能正在开发 v2.5。

在 Exntesion 类中,创建扩展后,您需要初始化程序来初始化系统中的任何上下文。为此,您需要使用 ContextExtension::INITIALIZER_TAG 在容器中创建一个服务,并取决于配置。我有

$container->setParameter('dev_tools_extension.parameters', $config); 

And then

private function loadContextInitializer(ContainerBuilder $container)
{
    $definition = new Definition(
        'App\Behat\DevToolsExtension\Context\Initializer\DevToolsExtensionInitializer', array(
            '%dev_tools_extension.parameters%'
        )
    );
    $definition->addTag(ContextExtension::INITIALIZER_TAG, array('priority' => 0));
    $container->setDefinition('dev_tools_extension.context_initializer', $definition);
}

初始化器通过调用 Context 来实现 Behat\Behat\Context\Initializer\ContextInitializer。接下来,您创建(例如接口)并在上下文中调用函数。我有:

    /**
 * Initializes provided context.
 *
 * @param Context $context
 */
public function initializeContext(Context $context)
{
    if (!$context instanceof ClipboardContextInterface) {
        return;
    }
    /** @var ClipboardContextInterface $context */

    $context->setClipboard($this->clipboard);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Behat 3 - 如何在上下文中检索自定义扩展 的相关文章

  • PHPunit - 错误

    当 PHPunit 框架不希望发生的错误发生时 测试会停止 PHP 会抛出错误 但 PHPunit 不会记录这是一个错误 我如何确保 PHPunit 将其记录为错误 免责声明 我是 PHPUnit 的新手 我也试图弄清楚 发生错误时会发生什
  • Magento 中的子域 htaccess 问题

    public html www domain com public html subdomain subdomain domain com public html htaccess public html subdomain htacces
  • 如何检查号码是否是巴基斯坦用户的手机号码而不是固定电话号码

    我所做的是从开头删除 92 或 0092 并使用以下代码检查它是否是巴基斯坦人的有效手机号码 if preg match 3 0 4 0 9 number 1 Pakistani mobile number else not a pakis
  • 压缩 zend Framework 2 的 html 输出

    我目前正在 PHP 5 4 4 上使用 Zend Framework 2 beta 开发个人 web 应用程序以用于自学目的 我想知道是否可以在 html 输出发送到浏览器之前拦截它 以便通过删除所有不必要的空格来缩小它 我怎样才能在ZF2
  • php表格:每行显示3个单元格[重复]

    这个问题在这里已经有答案了 我看这里 数组放入每行 5 个单元格的表格中 https stackoverflow com questions 9099568 array into a table with 5 cells in each r
  • 在会话 cookie 中存储大量数据会产生什么影响?

    谁能解释一下在会话中存储大量数据的缺点或给我指出一些阅读材料 我也很感兴趣在会话中存储数据和从数据文件读取数据之间是否有任何区别 如果您在会话中存储大量数据 则输入 输出性能会下降 因为会有大量读取 写入 默认情况下 PHP 中的会话存储在
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • strlen()==0 和empty()之间有区别吗?

    我正在查看其他人编写的一些表单验证代码 我看到了这个 strlen 0 当测试表单变量是否为空时 我使用empty 功能 一种方法比另一种方法更好吗 它们在功能上等效吗 strlen是获取字符串中的字符数 同时empty用于测试变量是否为空
  • 使用 php 更改白天和黑夜的背景?

    我正在制作一个 tumblr 页面 我的 html 页面有两种不同的背景 我希望白天背景从早上 7 点到晚上 8 点显示 夜间背景从晚上 8 点到早上 7 点显示 我决定用 php 来做这件事 但对于 php 来说我是个新手 我的朋友给我发
  • php 中的简单授权/登录功能

    我希望第一次实现用户登录到我的网站 我很高兴构建自己的解决方案 或者实现一些开源的东西 但是到目前为止 在我的搜索中没有任何包是明显的选择 同样 我完全意识到 作为一名中级 php 程序员 如果我推出自己的解决方案 并真正敞开大门 我很可能
  • Laravel 广播:通知与事件

    我阅读了 laravel 文档Events and Notifications 似乎我们可以触发一个事件 并从该事件中触发 使用ShouldBroadcast接口 将其广播到我理解的 laravel echo 另一方面我们可以使用通知via
  • 创建即用型 symfony 2 应用程序 zip

    我创建了一个 symfomy 应用程序包 可用于从 Android 应用程序收集崩溃报告 对于那些对 Android 和 ACRA 感兴趣的人 https github com marvinlabs acra server https gi
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 在 Woocommerce 购物车中设置最小小计金额

    我正在尝试将最低订单金额设置为 25 美元 到目前为止 我找到了这段代码 如果未达到最低限度 它似乎可以阻止结账 但它使用的小计包含税费 我需要在总计中排除税费 add action woocommerce checkout process
  • Azure 上的“phpcomposer.phar install”出现“无法终止进程”错误

    我正在尝试将我的 Symfony 2 应用程序部署到 Microsoft Azure 网站云 为此 我按照本指南中的步骤操作http symfony com doc current cookbook deployment azure web
  • php 表单提交 - Q2

    我对这个虚拟问题感到抱歉 这是我的简单 PHP 表单 其中包含两个 SQL 表和 ADD 提交 按钮 我希望将人员从 Test1 转移到 Test2 很多事情都很好 只有提交按钮不起作用 因此 Test2 表没有反馈 Revised 现在提
  • Zend Framework Zend_Form 装饰器: 位于按钮元素内部?

    我有一个像这样创建的按钮元素 submit new Zend Form Element Button submit submit gt setLabel My Button submit gt setDecorators array Vie
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function

随机推荐