roave / behat-psr11extension

Behat 的 PSR-11 容器扩展

2.4.0 2024-04-09 16:49 UTC

README

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version License

允许在 Behat 上下文中从 PSR-11 兼容的容器中注入服务。

@ciaranmcnulty 的很多帮助下创建。

用法

首先使用 Composer 安装扩展和依赖项

$ composer require --dev roave/behat-psr11extension

首先,如果你还没有,创建一个文件,该文件将被扩展包含,并返回一个 PSR-11 兼容的容器,例如使用 Laminas\ServiceManager

<?php
declare(strict_types=1);

use Laminas\ServiceManager\Config;
use Laminas\ServiceManager\ServiceManager;

// Load configuration
$config = require __DIR__ . '/config.php';

// Build container
$container = new ServiceManager();
(new Config($config['dependencies']))->configureServiceManager($container);

// Inject config
$container->setService('config', $config);

return $container;

然后在 behat.yml 中启用扩展

  extensions:
    Roave\BehatPsrContainer\PsrContainerExtension:
      container: 'config/container.php'

然后,在你的 behat.yml 套件配置中启用对 psr_container 服务容器的使用(这是由扩展提供的),例如

default:
  suites:
    my_suite:
      services: "@psr_container"

最后,在 behat.yml 中添加您上下文所需服务的名称,例如

default:
  suites:
    my_suite:
      services: "@psr_container"
      contexts:
        - MyBehatTestSuite\MyContext:
          - "@Whatever\\Service\\Name"

您还可以使用 behat 的内置 自动装配功能,自动将依赖项注入到上下文中

default:
  suites:
    my_suite:
      autowire: true
      services: "@psr_container"
      contexts:
        - MyBehatTestSuite\MyContext

如果你出于某种原因想要使用除 psr_container 之外的其他名称作为容器(例如,与其他扩展冲突),则可以覆盖此名称

  extensions:
    Roave\BehatPsrContainer\PsrContainerExtension:
      container: 'config/container.php'
      name: 'my_container'

仅为清晰起见(并希望易于理解),这相当于在纯 PHP 中执行此操作

<?php
declare(strict_types=1);

$container = require 'config/container.php';

$context = new \MyBehatTestSuite\MyContext($container->get('Whatever\Service\Name'));