Skip to content

MacPaw/behat-api-context

Repository files navigation

Behat Api Context Bundle

Version Build Status Code Coverage
master CI Coverage Status
develop CI Coverage Status

Installation

Step 1: Download the Bundle

Open a command console, enter your project directory and execute:

Applications that use Symfony Flex in progress

$ composer require --dev macpaw/behat-api-context

Applications that don't use Symfony Flex

Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:

$ composer require --dev macpaw/behat-api-context

This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation.

Then, enable the bundle by adding it to the list of registered bundles in the app/AppKernel.php file of your project:

<?php
// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...
            BehatApiContext\BehatApiContextBundle::class => ['test' => true],
        );

        // ...
    }

    // ...
}

Step 2: Configure Behat

Go to behat.yml

# ...
  contexts:
    - BehatApiContext\Context\ApiContext
# ...

If you want use orm context add to behat.yml

# ...
  contexts:
    - BehatApiContext\Context\ORMContext 
# ...

Usage

Runnable request parameters

Main use case when tests need to use current date. Instead of static data in some testCaseName.feature, like this:

"""
{
    "dateTo": 1680360081,
    "dateFrom": 1680532881,
}
"""

Can use, for example:

"""
{
    "dateTo": "<(new DateTimeImmutable())->add(new DateInterval('P6D'))->getTimeStamp()>",
    "dateFrom": "<(new DateTimeImmutable())->add(new DateInterval('P2D'))->getTimeStamp()>",
}
"""

To accomplish this, several conditions must be met:

  • Runnable code must be a string and placed in <>
  • Should not add return keyword at the beginning, otherwise will get RuntimeException
  • Should not add ; keyword at the end, otherwise will get RuntimeException
  • Should not use the code that returns null, otherwise will get RuntimeException