15/02/2017 - BEHAT, SYMFONY
Aşağıda da gördüğümüz gibi, behat ile birden fazla context dosyası yaratıp kullanabiliriz. Bu şekilde uygulama mantığını farklı dosyalara ayırıp, her birine istediğimiz yerden ulaşabiliriz.
default:
extensions:
BehatSymfony2Extension: ~
BehatMinkExtension:
base_url: http://inanzzz.dev:8082/app_test.php
sessions:
symfony2:
symfony2: ~
suites:
app:
type: symfony_bundle
bundle: InanzzzApplicationBundle
mink_session: symfony2
contexts:
- InanzzzApplicationBundle\Features\Context\FeatureContext
- InanzzzApplicationBundle\Features\Context\CommonContext
- InanzzzApplicationBundle\Features\Context\CountryContext
namespace InanzzzApplicationBundle\Features\Context;
use Behat\Behat\Context\Context;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use Behat\Mink\Extension\Context\MinkContext;
class FeatureContext extends MinkContext implements Context
{
/** @var CommonContext $commonContext */
private $commonContext;
/**
* @param BeforeScenarioScope $scope
*
* @BeforeScenario
*/
public function gatherContexts(BeforeScenarioScope $scope)
{
$environment = $scope->getEnvironment();
$this->commonContext = $environment->getContext(CommonContext::class);
}
/**
* @BeforeScenario @common
*/
public function consumeCommonContext()
{
echo $this->commonContext->greet('inanzzz');
}
/**
* @Given /^I can call CommonContext method from FeatureContext$/
*/
public function iCanCallCommonContextMethodFromFeatureContext()
{
echo $this->commonContext->greet('inanzzz');
}
}
namespace InanzzzApplicationBundle\Features\Context;
use Behat\Behat\Context\Context;
use Behat\Symfony2Extension\Context\KernelAwareContext;
use Symfony\Component\Http\Kernel\KernelInterface;
class CommonContext implements Context, KernelAwareContext
{
/** @var KernelInterface */
private $kernel;
/**
* @param KernelInterface $kernel
*/
public function setKernel(KernelInterface $kernel)
{
$this->kernel = $kernel;
}
/**
* @return KernelInterface
*/
public function getKernel()
{
return $this->kernel;
}
/**
* @param string $name
*
* @return string
*/
public function greet($name)
{
return 'Hello '.$name;
}
/**
* @Given /^I greet you$/
*/
public function iGreetYou()
{
echo $this->greet('inanzzz');
}
}
namespace InanzzzApplicationBundle\Features\Context;
use Behat\Behat\Context\Context;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
class CountryContext implements Context
{
/** @var CommonContext $commonContext */
private $commonContext;
/** @var FeatureContext $featureContext */
private $featureContext;
/**
* @param BeforeScenarioScope $scope
*
* @BeforeScenario
*/
public function gatherContexts(BeforeScenarioScope $scope)
{
$environment = $scope->getEnvironment();
$this->commonContext = $environment->getContext(CommonContext::class);
$this->featureContext = $environment->getContext(FeatureContext::class);
}
/**
* @Given /^I say hi$/
*/
public function iSayHi()
{
echo 'Hi inanzzz';
}
/**
* @Given /^I can call FeatureContext method from CountryContext$/
*/
public function iCanCallFeatureContextMethodFromCountryContext()
{
echo $this->featureContext->iCanCallCommonContextMethodFromFeatureContext('inanzzz');
}
}
Feature: Mix of tests.
Scenario: Just shows that the methods in MinkContext are accessible via FeatureContext.
Given I am on "/countries"
Then I should see "Turkey"
And I should not see "Japan"
Scenario: I can indirectly call a CommonContext method from FeatureContext.
Given I can call CommonContext method from FeatureContext
Scenario: I can directly call a CommonContext step.
Given I greet you
Scenario: I can directly call a CountryContext step.
Given I say hi
Scenario: I can indirectly call a FeatureContext method from CountryContext.
Given I can call FeatureContext method from CountryContext
@common
Scenario: I can indirectly call a CommonContext method from FeatureContext by using tags.
$ vendor/bin/behat --suite=app
Feature: Mix of tests.
Scenario: Just shows that the methods in MinkContext are accessible via FeatureContext.
Given I am on "/countries"
Then I should see "Turkey"
And I should not see "Japan"
Scenario: I can indirectly call a CommonContext method from FeatureContext.
Given I can call CommonContext method from FeatureContext
│ Hello inanzzz
Scenario: I can directly call a CommonContext step.
Given I greet you
│ Hello inanzzz
Scenario: I can directly call a CountryContext step.
Given I say hi
│ Hi inanzzz
Scenario: I can indirectly call a FeatureContext method from CountryContext.
Given I can call FeatureContext method from CountryContext
│ Hello inanzzz
┌─ @BeforeScenario @common
│
│ Hello inanzzz
│
@common
Scenario: I can indirectly call a CommonContext method from FeatureContext by using tags.
5 scenarios (5 passed)
7 steps (7 passed)
0m0.63s (26.71Mb)