How To Configure Behat with Symfony 4

2018-01-15. Written by Rafal Muszynski.

Every project needs tests to maintain the code stability and help eliminate potential bugs immediately. When building REST API, you need to test its functionality. One of the great tools in the PHP world is Behat. It is an open-source BDD framework for auto-testing your business expectations which is using Gherkin language.

In this article, I will cover step by step guide on how to configure Behat with Symfony 4 framework to test JSON REST API.

Assumed you already have a Symfony 4 application and REST API running (for example using FOSRestBundle).

Installing and configuring Behat

composer req behat/behat --dev

Note: The --dev flag indicates that the package will be added to the require-dev section in your composer.json file.

Note: No need to run behat --init, see Installing Behat Symfony2 Extension section below to find out why.

Install Behat Mink

Mink is an open source browser emulator for web applications. It is used to simulate the interaction between browser and our REST API application to check if it works correctly when running tests.

Install it by running command:

composer req behat/mink --dev

Installing Behat Symfony2 Extension

Note: it might be confusing that it is named Symfony2 extension, although it works fine with Symfony 2+ versions.

Symfony2Extension is an integration layer between Behat 3+ and Symfony2+ frameworks which provides a complete integration with Symfony2+ bundles structure, an initialized and booted kernel instance for your contexts and additional symfony2 Mink driver, if the Mink Extension is installed (see Installing Behat Mink Extension section below).

Install Symfony2Extension using Composer:

composer req behat/symfony2-extension --dev

Thanks to Symfony Flex and its recipes approach, it will automatically create a basic structure, a directory called features in your main project dir with the default FeatureContext class and bootstrap directory containing bootstrap.php file.

Additionally, an example demo.feature feature file will be created inside features directory and Behat configuration file called behat.yml.dist in your main project directory. The example configuration will look like:

Copy behat.yml.dist to behat.yml which you will need to edit later on.

Installing Mink BrowserKit Driver

BrowserKitDriver provides a bridge for the Symfony BrowserKit component. BrowserKit is a browser emulator provided by the Symfony project.

Run command:

composer req behat/mink-browserkit-driver --dev

BrowserKit will be used now to emulate out functional tests.

Installing Behat Mink Extension

MinkExtension is an integration layer between Behat 3.0+ and Mink 1.5+ and it provides:

  • Additional services for Behat (Mink, Sessions, Drivers).

  • Behat\MinkExtension\Context\MinkAwareContext which provides Mink instance for your contexts.

  • Base Behat\MinkExtension\Context\MinkContext context which provides base step definitions and hooks for your contexts or subcontexts. Or it could be even used as context on its own.

To install it, run Composer command:

composer req behat/mink-extension --dev

And adjust the Behat config file:

Thanks to this extension we can easily use Mink together with Behat and run functional tests.

Installing Behatch Contexts

Behatch Contexts is a package with most commonly used steps. It is an extension which provides, among others, a Behat context such as JSON, XML, REST, debug etc. It requires Mink and Mink Extension to be installed.

Install it by running the following command:

composer req behatch/contexts --dev

In behat.yml file enable installed Behatch Contexts. In this case, behatch:context:json and behatch:context:rest context will be used to test JSON REST API. Also, Behatch\Extension extension should be activated:

You can now create your first feature inside features directory:

and run it by executing command:

APP_ENV=test bin/behat

Behat gives you a lot of power over the functional testing. Writing new features has never been so easy.

Enjoy writing your tests!

If you need to deploy Symfony 4 app quickly to production I recommend using one of the cheap VPS servers by DigitalOcean. By signing up from here you would receive $10 free credit for your droplet.

Tags: behat, php, bdd, symfony, flex, symfony4