Fork us

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.