Search code examples
phpvariablesbehatscenarios

Behat: use variable between the steps in a scenario


How can I use variable between the steps within one scenario in behat? I need to store the value of $output and then use it in the second step.

Let's say I have the following structure:

class testContext extends DefaultContext
{
    /** @When /^I click "([^"]*)"$/ */
    public function iClick($element) {
       if ($element = 2){
           $output = 5        
       }
    }


    /** @When /^I press "([^"]*)"$/ */
    public function iPress($button) {
        if($button == $output){
        echo "ok";
        }
    }
}

Solution

  • The context class can be stateful; all steps of a scenario will use the same context instance. This means that you can use regular class attributes to preverse state between steps:

    class testContext extends DefaultContext
    {
        private $output = NULL;
    
        /** @When /^I click "([^"]*)"$/ */
        public function iClick($element)
        {
           if ($element = 2) {
               $this->output = 5;
           }
        }
    
    
        /** @When /^I press "([^"]*)"$/ */
        public function iPress($button)
        {
            if ($this->output === NULL) {
                throw new BadMethodCallException("output must be initialized first");
            }
    
            if ($button == $this->output) {
                echo "ok";
            }
        }
    }