bex/behat-test-runner

Component to help in self testing Behat extension development

1.3.1 2020-04-07 15:12 UTC

README

Build Status

Behat Test Runner is essentially a Behat context class which provides steps for testing a Behat extension. You can put together a feature file and behat.yml configuration, than the test runner will start a second Behat process to evaluate the created feature file.

Installation

Install by adding to your composer.json:

composer require --dev bex/behat-test-runner

Configuration

Include the context file in behat.yml like this:

default:
  suites:
    default:
      contexts:
        - Bex\Behat\Context\TestRunnerContext

You can configure the test web browser to be used for opening the pages, like this (optional):

default:
  suites:
    default:
      contexts:
        - Bex\Behat\Context\TestRunnerContext:
            browserCommand: %paths.base%/bin/phantomjs --webdriver=4444

You can configure the working directory like this (optional):

default:
  suites:
    default:
      contexts:
        - Bex\Behat\Context\TestRunnerContext:
            workingDirectory: path/to/your/working/dir # if not provided then a temporary working dir is autogenerated

Usage

Simply use the necessary steps from the context file to put together your feature.

An example:

Feature: Visiting a page on the website
    In order to demonstrate how to use test runner
    As a developer
    I should open a page and verify the content of it

    Scenario: Visiting the index.html page
        Given I have the file "index.html" in document root:
            """
            <!DOCTYPE html>
            <html>
              <head>
                  <meta charset="UTF-8">
                  <title>Test page</title>
              </head>
              <body>
                  <h1>Lorem ipsum dolor amet.</h1>
              </body>
            </html>
            """
        And I have a web server running on host "localhost" and port "8080"
        And I have the feature:
            """
            Feature: Test runner demo feature
                Scenario:
                    Given I open the index page
                    Then I should see the content "Lorem ipsum" on the page
            """
        And I have the context:
            """
            <?php
            use Behat\MinkExtension\Context\RawMinkContext;
            class FeatureContext extends RawMinkContext
            {
                /**
                 * @Given I open the index page
                 */
                function firstStep()
                {
                    $this->visitPath('index.html');
                }
                /**
                 * @Then I should see the content :content on the page
                 */
                function secondStep($content)
                {
                   $this->getMink()->assertElementContains('h1', $content);
                }
            }
            """
        When I run Behat
        Then I should not see a failing test