FriendsOfBehat / SymfonyExtension

:musical_score: Extension integrating Behat with Symfony.
MIT License
472 stars 62 forks source link

Service injection not working #132

Closed unixslayer closed 3 years ago

unixslayer commented 3 years ago

Hi,

I've installed SymfonyExtension as it was described in documentation. Having a context that require dependency to be injected running behat ends up with following error:

In Validator.php line 61:

  [Behat\Testwork\Argument\Exception\UnknownParameterValueException]                                                                 
  Can not find a matching value for an argument `$container` of the method `Dotpay\Behat\Context\CommandBusContext::__construct()`.  

Exception trace:
  at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Argument/Validator.php:61
 Behat\Testwork\Argument\Validator->validateArgument() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Argument/Validator.php:36
 Behat\Testwork\Argument\Validator->validateArguments() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Behat/Context/ContextFactory.php:117
 Behat\Behat\Context\ContextFactory->resolveArguments() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Behat/Context/ContextFactory.php:87
 Behat\Behat\Context\ContextFactory->createContext() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Behat/Context/Environment/Handler/ContextEnvironmentHandler.php:121
 Behat\Behat\Context\Environment\Handler\ContextEnvironmentHandler->isolateEnvironment() at /home/unixslayer/projekty/affiliate/vendor/friends-of-behat/symfony-extension/src/Context/Environment/Handler/ContextServiceEnvironmentHandler.php:106
 FriendsOfBehat\SymfonyExtension\Context\Environment\Handler\ContextServiceEnvironmentHandler->isolateEnvironment() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Environment/EnvironmentManager.php:93
 Behat\Testwork\Environment\EnvironmentManager->isolateEnvironment() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Behat/Tester/Runtime/IsolatingScenarioTester.php:65
 Behat\Behat\Tester\Runtime\IsolatingScenarioTester->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeFeatureTester.php:84
 Behat\Behat\Tester\Runtime\RuntimeFeatureTester->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Behat/Hook/Tester/HookableFeatureTester.php:72
 Behat\Behat\Hook\Tester\HookableFeatureTester->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingFeatureTester.php:82
 Behat\Behat\EventDispatcher\Tester\EventDispatchingFeatureTester->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Tester/Runtime/RuntimeSuiteTester.php:63
 Behat\Testwork\Tester\Runtime\RuntimeSuiteTester->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Hook/Tester/HookableSuiteTester.php:73
 Behat\Testwork\Hook\Tester\HookableSuiteTester->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingSuiteTester.php:83
 Behat\Testwork\EventDispatcher\Tester\EventDispatchingSuiteTester->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Tester/Runtime/RuntimeExercise.php:71
 Behat\Testwork\Tester\Runtime\RuntimeExercise->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingExercise.php:81
 Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Ordering/OrderedExercise.php:80
 Behat\Testwork\Ordering\OrderedExercise->test() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php:149
 Behat\Testwork\Tester\Cli\ExerciseController->testSpecifications() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php:108
 Behat\Testwork\Tester\Cli\ExerciseController->execute() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Cli/Command.php:63
 Behat\Testwork\Cli\Command->execute() at /home/unixslayer/projekty/affiliate/vendor/symfony/console/Command/Command.php:258
 Symfony\Component\Console\Command\Command->run() at /home/unixslayer/projekty/affiliate/vendor/symfony/console/Application.php:920
 Symfony\Component\Console\Application->doRunCommand() at /home/unixslayer/projekty/affiliate/vendor/symfony/console/Application.php:266
 Symfony\Component\Console\Application->doRun() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/src/Behat/Testwork/Cli/Application.php:124
 Behat\Testwork\Cli\Application->doRun() at /home/unixslayer/projekty/affiliate/vendor/symfony/console/Application.php:142
 Symfony\Component\Console\Application->run() at /home/unixslayer/projekty/affiliate/vendor/behat/behat/bin/behat:34

Symfony: 5.1 Behat: 3.7 SymfonyExtension: 2.1

;config/services_test.yaml
services:
    _defaults:
        autowire: true
        autoconfigure: true

    Acme\Behat\:
        resource: '../src/Acme/Behat/*'

    Acme\Behat\Context\AcmeContext: ; injection not working with autowire and after configuring context in place
        public: true
        arguments:
            - '@test.service_container'
<?php

declare(strict_types=1);

namespace Acme\Behat\Context;

use Assert\Assertion;
use Behat\Behat\Context\Context;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Messenger\Transport\TransportInterface;

final class AcmeContext implements Context
{
    private ContainerInterface $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

   //...
}
;behat.yaml.dist
default:
    suites:
        default:
            contexts:
                - behatch:context:rest
                - behatch:context:json
                - behatch:context:debug
                - Behat\MinkExtension\Context\MinkContext
                - Acme\Behat\Context\CommandBusContext

    extensions:
        Behat\MinkExtension:
            base_url: '%env(APP_URL)%'
            sessions:
                default:
                    symfony: ~
        Behatch\Extension: ~
        FriendsOfBehat\SymfonyExtension: ~
unixslayer commented 3 years ago

All I did was to change context class constructor from

public function __construct(ContainerInterface $container)

into

public function __construct(ContainerInterface $driverContainer)

and it started to work. Also, I'm using autowired configuration for contexts.