Skip to content

Integrates php-vcr into Symfony and its web profiler.

Notifications You must be signed in to change notification settings

php-vcr/VCRBundle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4700c57 · Dec 15, 2022

History

85 Commits
Dec 15, 2022
Dec 15, 2022
Dec 15, 2022
Aug 25, 2021
Dec 14, 2022
Dec 15, 2022
Dec 15, 2022
Dec 14, 2022

Repository files navigation

VCRBundle

Integrates php-vcr into Symfony and its web profiler. It also provides a VideoRecorderBrowser for testing purpose with extra helper methods handling php-vcr recordings.

PHP-VCR Symfony web profiler panel

PHP-VCR Symfony web profiler panel - request details

PHP-VCR Symfony web profiler panel - response details

Installation

Install the behavior adding php-vcr/vcr-bundle to your composer.json or from CLI:

composer require php-vcr/vcr-bundle

And declare the bundle in your config/bundles.php file:

<?php
declare(strict_types = 1);

return [
    // ...
    VCR\VCRBundle\VCRBundle::class => ['test' => true],
];

Usage

Enable the required library hooks for your purpose and write test cases.

VideoRecorderBrowser (without Trait)

<?php
declare(strict_types = 1);

class ExampleTest extends \VCR\VCRBundle\Tests\Functional\WebTestCase
{
    public function test(): void
    {
        $kernel = static::bootKernel();
        /** @var \VCR\VCRBundle\VideoRecorderBrowser $client */
        $client = $kernel->getContainer()->get('test.client.vcr');
        
        $client->insertVideoRecorderCassette('my-test-cassette-name');
        
        // this is an example, normally services inside you project do stuff like this and you trigger them by
        // execute requests via the KernelBrowser client
        file_get_contents('https://www.google.de');
        
        // cassette.path is configured to '%kernel.project_dir%/tests/Fixtures'
        // recordings are written to %kernel.project_dir%/tests/Fixtures/my-test-cassette-name
        // cassette.path + cassetteName (done by inserting the cassette)
    }
}

VideoRecorderBrowser (with Trait)

<?php
declare(strict_types = 1);

namespace MyCompany\MyProject\Tests\Functional;

class ExampleTest extends \VCR\VCRBundle\Tests\Functional\WebTestCase
{
    use \VCR\VCRBundle\Test\VCRTestCaseTrait;

    /**
     * Specify a namespace prefix which should be ignored while generating the base path for this test case. 
     */
    protected $ignoredTestSuiteNamespacePrefix = 'MyCompany\\MyProject\\Tests\\';

    public function test(): void
    {
        /** @var \VCR\VCRBundle\VideoRecorderBrowser $client */
        $client = static::createVideoRecorderClient();
        
        // this is an example, normally services inside you project do stuff like this and you trigger them by
        // execute requests via the KernelBrowser client
        file_get_contents('https://www.google.de');
        
        // cassette.path is configured to '%kernel.project_dir%/tests/Fixtures'
        // recordings are written to %kernel.project_dir%/tests/Fixtures/Functional/ExampleTest/test
        // cassette.path + TestCasePath (- ignoredTestSuiteNamespacePrefix) + TestName
    }
}

Configuration reference

vcr:
  enabled: true
  library_hooks:
    stream_wrapper: false
    curl: false
    soap: false
  request_matchers:
    method: true
    url: true
    query_string: true
    host: true
    headers: true
    body: true
    post_fields: true
  cassette:
    type: json
    path: '%kernel.cache_dir%/vcr'
    name: vcr

Credits

License

This bundle is released under the MIT license.