Merge branch '2.1'

* 2.1:
  Browser integration
This commit is contained in:
Kamil Kokot
2020-04-04 22:38:56 +02:00
2 changed files with 98 additions and 19 deletions

View File

@@ -22,6 +22,16 @@ Feature: BrowserKit integration
When I visit the page "/hello-world" When I visit the page "/hello-world"
Then I should see "Hello world!" on the page Then I should see "Hello world!" on the page
""" """
Scenario: Injecting KernelBrowser manually
Given a YAML services file containing:
"""
services:
App\Tests\SomeContext:
public: true
arguments:
- '@test.client'
"""
And a context file "tests/SomeContext.php" containing: And a context file "tests/SomeContext.php" containing:
""" """
<?php <?php
@@ -31,14 +41,13 @@ Feature: BrowserKit integration
use Behat\Behat\Context\Context; use Behat\Behat\Context\Context;
use FriendsOfBehat\SymfonyExtension\Mink\MinkParameters; use FriendsOfBehat\SymfonyExtension\Mink\MinkParameters;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
use Symfony\Component\BrowserKit\AbstractBrowser; use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Component\BrowserKit\Client;
final class SomeContext implements Context { final class SomeContext implements Context {
/** @var Client|AbstractBrowser */ /** @var KernelBrowser */
private $client; private $client;
public function __construct($client) public function __construct(KernelBrowser $client)
{ {
$this->client = $client; $this->client = $client;
} }
@@ -56,20 +65,10 @@ Feature: BrowserKit integration
} }
} }
""" """
Scenario: Injecting BrowserKit client
Given a YAML services file containing:
"""
services:
App\Tests\SomeContext:
public: true
arguments:
- '@test.client'
"""
When I run Behat When I run Behat
Then it should pass Then it should pass
Scenario: Autowiring and autoconfiguring BrowserKit client Scenario: Autowiring and autoconfiguring KernelBrowser client
Given a YAML services file containing: Given a YAML services file containing:
""" """
services: services:
@@ -77,10 +76,86 @@ Feature: BrowserKit integration
autowire: true autowire: true
autoconfigure: true autoconfigure: true
bind:
$client: "@test.client"
App\Tests\SomeContext: ~ App\Tests\SomeContext: ~
""" """
And a context file "tests/SomeContext.php" containing:
"""
<?php
namespace App\Tests;
use Behat\Behat\Context\Context;
use FriendsOfBehat\SymfonyExtension\Mink\MinkParameters;
use Psr\Container\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
final class SomeContext implements Context {
/** @var KernelBrowser */
private $client;
public function __construct(KernelBrowser $client)
{
$this->client = $client;
}
/** @When I visit the page :page */
public function visitPage(string $page): void
{
$this->client->request('GET', $page);
}
/** @Then I should see :content on the page */
public function shouldSeeContentOnPage(string $content): void
{
assert(false !== strpos($this->client->getResponse()->getContent(), $content));
}
}
"""
When I run Behat
Then it should pass
Scenario: Autowiring and autoconfiguring HttpKernelBrowser client
Given a YAML services file containing:
"""
services:
_defaults:
autowire: true
autoconfigure: true
App\Tests\SomeContext: ~
"""
And a context file "tests/SomeContext.php" containing:
"""
<?php
namespace App\Tests;
use Behat\Behat\Context\Context;
use FriendsOfBehat\SymfonyExtension\Mink\MinkParameters;
use Psr\Container\ContainerInterface;
use Symfony\Component\HttpKernel\HttpKernelBrowser;
final class SomeContext implements Context {
/** @var HttpKernelBrowser */
private $client;
public function __construct(HttpKernelBrowser $client)
{
$this->client = $client;
}
/** @When I visit the page :page */
public function visitPage(string $page): void
{
$this->client->request('GET', $page);
}
/** @Then I should see :content on the page */
public function shouldSeeContentOnPage(string $content): void
{
assert(false !== strpos($this->client->getResponse()->getContent(), $content));
}
}
"""
When I run Behat When I run Behat
Then it should pass Then it should pass

View File

@@ -9,6 +9,7 @@ use Behat\Mink\Mink;
use Behat\Mink\Session; use Behat\Mink\Session;
use FriendsOfBehat\SymfonyExtension\Mink\MinkParameters; use FriendsOfBehat\SymfonyExtension\Mink\MinkParameters;
use FriendsOfBehat\SymfonyExtension\ServiceContainer\SymfonyExtension; use FriendsOfBehat\SymfonyExtension\ServiceContainer\SymfonyExtension;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Component\BrowserKit\Client; use Symfony\Component\BrowserKit\Client;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -16,6 +17,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\HttpKernel\HttpKernelBrowser;
use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\HttpKernel\KernelInterface;
final class FriendsOfBehatSymfonyExtensionExtension extends Extension implements CompilerPassInterface final class FriendsOfBehatSymfonyExtensionExtension extends Extension implements CompilerPassInterface
@@ -73,11 +75,13 @@ final class FriendsOfBehatSymfonyExtensionExtension extends Extension implements
private function provideBrowserKitIntegration(ContainerBuilder $container): void private function provideBrowserKitIntegration(ContainerBuilder $container): void
{ {
if (!class_exists(Client::class) || !$container->has('test.client')) { if (!$container->has('test.client')) {
return; return;
} }
$container->setAlias(Client::class, 'test.client'); foreach ([Client::class, KernelBrowser::class, HttpKernelBrowser::class] as $class) {
$container->setAlias($class, 'test.client');
}
} }
private function provideMinkIntegration(ContainerBuilder $container): void private function provideMinkIntegration(ContainerBuilder $container): void