2017 © Pedro Peláez
 

library behat-psr7extension

image

ciaranmcnulty/behat-psr7extension

  • Saturday, May 6, 2017
  • by ciaranmcnulty
  • Repository
  • 0 Watchers
  • 14 Stars
  • 348 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 6 Forks
  • 4 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

PSR-7 Behat Driver

This is a proof of concept to show that Behat can drive a PSR-7 application without going via a webserver, (*1)

It's currently built by combining:, (*2)

  • The existing Mink Browserkit driver, that can test a Symfony app
  • The existing Symfony to PSR-7 bridge, to translate requests and resources back and forth

... and integrating into a behat extension, (*3)

Usage

Install via composer and configure your behat.yml, specifying the php file that will bootstrap the app (see below):, (*4)

extensions:
  Cjm\Behat\Psr7Extension:
    app: %paths.base%/path/to/file.php

You can then also modify your MinkExtension configuration to use the PSR-7 driver, e.g.:, (*5)

extensions:
Behat\MinkExtension:
  base_url:  'http://localhost'
  sessions:
    default:
      psr7: ~

Because there is no current standard interface for PSR-7-handling apps, you will need to select one of the following supported approaches., (*6)

Zend Expressive applications

Your configuration file will need to return your application file, bootstrapped. For example:, (*7)

$container = require __DIR__ . '/../config/container.php';
return $container->get('Zend\Expressive\Application');

Slim applications

Your configuration file will need to return your application file, bootstrapped. For example:, (*8)

<?php

$app = new \Slim\App;
// .. any necessary bootstrapping
return $app;

All other PSR-7 applications

As long as you can write a function that takes a request and returns a response, you should be able to test your app. Your configuration file will need to return return a callable with the right signature. For example:, (*9)

<?php

use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

// bootstrap your application
$app = new My\App();

return function (RequestInterface $request) use ($app) : ResponseInterface
{
    // exercise your application however you normally would
    return $app->handle($request);
};

The Versions