This Behat extension makes it possible to extend Behat without having to write an extension yourself.
This extension requires:
- Behat ^3.0
- PHP ^7.1
The easiest way to install it is to use Composer
$ composer require --dev zalas/behat-no-extension
Next, activate the extension in your behat.yml
:
# behat.yml
default:
extensions:
Zalas\Behat\NoExtension: ~
Extension enables you to load service definitions and parameters from
configuration files specified in the imports
section:
# behat.yml
default:
extensions:
Zalas\Behat\NoExtension:
imports:
- features/bootstrap/config/services.yml
These should simply be Symfony's service container configuration files:
# features/bootstrap/config/services.yml
services:
Acme\SimpleArgumentResolver:
tags:
- { name: context.argument_resolver }
parameters:
acme.foo: boo!
Yaml, xml and php formats are currently supported.
Note that any classes you'd like to use should be autoloaded by composer.
For the example above, autoload-dev
or autoload
should include the Acme\\
autoloader prefix.
Enable the argument resolver to take advantage of the built in support for service injection:
# behat.yml
default:
extensions:
Zalas\Behat\NoExtension:
argument_resolver: true
imports:
- features/bootstrap/config/services.yml
Assuming services you'd like to inject into contexts are defined in features/bootstrap/Acme
,
and they're autoloaded by composer, you can now start defining them in your configuration file:
# features/bootstrap/config/services.yml
services:
Acme\:
resource: '../Acme'
public: true
autowire: true
The above example relies on autoworing, but you could also define each service explicitly.
An example composer autoloader configuration:
{
"autoload-dev": {
"psr-4": {
"Acme\\": "features/bootstrap/Acme"
}
}
}
Given there's a class Acme\Foo
defined, it can now be injected into contexts:
use Acme\Foo;
use Behat\Behat\Context\Context;
class FeatureContext implements Context
{
private $foo;
public function __construct(Foo $foo)
{
$this->foo = $foo;
}
}
Parameters defined in imported files are also available in behat.yml
:
# behat.yml
default:
suites:
search:
contexts:
- SearchContext:
myFoo: '%acme.foo%'
# ...
Furthermore, parameters can also be defined as part of extension's configuration directly in behat.yml
:
# behat.yml
default:
extensions:
Zalas\Behat\NoExtension:
parameters:
foo: bar
baz:
a: 1
b: 'bazinga!'
Please read the Contributing guide to learn about contributing to this project. Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.