diff --git a/composer.json b/composer.json index 4aa391e..3309390 100644 --- a/composer.json +++ b/composer.json @@ -21,6 +21,7 @@ "behat/mink": "^1.7", "behat/mink-browserkit-driver": "^1.3", "behat/mink-extension": "^2.2", + "behat/mink-selenium2-driver": "^1.3", "friends-of-behat/service-container-extension": "^1.0", "phpstan/phpstan-shim": "^0.11", "sylius-labs/coding-standard": "^3.0", diff --git a/features/mink_integration/switching_mink_sessions.feature b/features/mink_integration/switching_mink_sessions.feature new file mode 100644 index 0000000..453218f --- /dev/null +++ b/features/mink_integration/switching_mink_sessions.feature @@ -0,0 +1,70 @@ +Feature: Switching Mink sessions + + Scenario: Switching Mink sessions + Given a working Symfony application with SymfonyExtension configured + And a Behat configuration containing: + """ + default: + extensions: + Behat\MinkExtension: + base_url: "http://localhost:8080/" + default_session: symfony + javascript_session: selenium2 + sessions: + symfony: + symfony: ~ + selenium2: + selenium2: ~ + + + suites: + default: + contexts: + - App\Tests\SomeContext + """ + And a feature file containing: + """ + Feature: + Scenario: + Then I should use Mink session with "FriendsOfBehat\SymfonyExtension\Driver\SymfonyDriver" as a driver + + @javascript + Scenario: + Then I should use Mink session with "Behat\Mink\Driver\Selenium2Driver" as a driver + """ + And a context file "tests/SomeContext.php" containing: + """ + session = $session; + } + + /** @Then I should use Mink session with :driver as a driver*/ + public function shouldUseDriver(string $driverClass): void + { + var_dump(get_class($this->session)); + var_dump(get_class($this->session->getDriver())); + assert($this->session->getDriver() instanceof $driverClass); + } + } + """ + And a YAML services file containing: + """ + services: + App\Tests\SomeContext: + public: true + arguments: + - '@behat.mink.default_session' + """ + When I run Behat + Then it should pass diff --git a/src/Bundle/DependencyInjection/FriendsOfBehatSymfonyExtensionExtension.php b/src/Bundle/DependencyInjection/FriendsOfBehatSymfonyExtensionExtension.php index 8cd3921..cf78d75 100644 --- a/src/Bundle/DependencyInjection/FriendsOfBehatSymfonyExtensionExtension.php +++ b/src/Bundle/DependencyInjection/FriendsOfBehatSymfonyExtensionExtension.php @@ -64,10 +64,18 @@ final class FriendsOfBehatSymfonyExtensionExtension extends Extension implements private function registerMinkDefaultSession(ContainerBuilder $container): void { - $minkDefaultSessionDefinition = new Definition(Session::class, ['fob_symfony.mink.default_session']); + $minkDefinition = new Definition(Mink::class, ['mink']); + $minkDefinition->setPublic(true); + $minkDefinition->setLazy(true); + $minkDefinition->setFactory([new Reference('behat.service_container'), 'get']); + + $container->setDefinition('behat.mink', $minkDefinition); + $container->setAlias(Mink::class, 'behat.mink'); + + $minkDefaultSessionDefinition = new Definition(Session::class); $minkDefaultSessionDefinition->setPublic(true); $minkDefaultSessionDefinition->setLazy(true); - $minkDefaultSessionDefinition->setFactory([new Reference('behat.service_container'), 'get']); + $minkDefaultSessionDefinition->setFactory([new Reference('behat.mink'), 'getSession']); $container->setDefinition('behat.mink.default_session', $minkDefaultSessionDefinition); $container->setAlias(Session::class, 'behat.mink.default_session');