2017 © Pedro Peláez
 

library behat-psr11extension

PSR-11 Container extension for Behat

image

roave/behat-psr11extension

PSR-11 Container extension for Behat

  • Monday, June 18, 2018
  • by asgrim
  • Repository
  • 10 Watchers
  • 20 Stars
  • 2,688 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 1 Open issues
  • 3 Versions
  • 81 % Grown

The README.md

PSR-11 Container extension for Behat

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version License, (*1)

Allows injecting services from a PSR-11-compatibile container in a Behat context., (*2)

Created with lots of help from @ciaranmcnulty., (*3)

Usage

First require the extension and dependencies with Composer:, (*4)

$ composer require --dev roave/behat-psr11extension

First, if you don't already have one, create a file that will be included by the extension that returns a PSR-11 compatible container, for example using Laminas\ServiceManager:, (*5)

<?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;

Then enable the extension in behat.yml:, (*6)

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

Then enable the use of the psr_container service container (this is provided by the extension) in your behat.yml suite configuration, for example:, (*7)

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

And finally, add the names of any services required by your contexts in behat.yml, for example:, (*8)

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

You can also use behat's built-in autowire feature, to automatically inject the dependencies to the context:, (*9)

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

If for some reason you want to use a name other than psr_container for the container (e.g. collision with another extension) this can be overridden:, (*10)

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

Just for clarity (and hopefully ease of understanding), this would be the equivalent of doing this in plain PHP:, (*11)

<?php
declare(strict_types=1);

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

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

The Versions

18/06 2018
18/06 2018
17/08 2017