Acessando um contexto de outro¶
Quando dividimos as definições em múltiplos contextos, pode ser útil acessar um contexto apartir de outro. Isto é particularmente útil ao migrar do Behat 2.x para substituir sub contextos.
O Behat permite acessar o ambiente em hooks, então outros contextos podem ser recuperados utilizando a hook BeforeScenario:
use Behat\Behat\Context\Context;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
class FeatureContext implements Context
{
/** @var \Behat\MinkExtension\Context\MinkContext */
private $minkContext;
/** @BeforeScenario */
public function reunirContextos(BeforeScenarioScope $scope)
{
$environment = $scope->getEnvironment();
$this->minkContext = $environment->getContext('Behat\MinkExtension\Context\MinkContext');
}
}
Caution
Referências circulares em objetos de contexto impediriam a referência PHP contagem de contextos da recolha até o fim de cada cenário, forçando a aguardar o garbage collector ser executado. Isso aumentaria o uso de memória utilizada pela execução do Behat. Para prevenir isto, é melhor evitar o armazenamento do ambiente em suas classes de contexto. Também é melhor evitar a criação de referências circulares entre diferentes contextos.