justintime50/vcr-accessories

为您的PHP VCR提供各种配件

v0.3.0 2024-09-19 20:31 UTC

This package is auto-updated.

Last update: 2024-09-19 20:34:00 UTC


README

Build Status Coverage Status Licence

为您的 PHP VCR 提供各种工具和配件。

当使用VCR解决方案时,我常常发现我需要一些额外的“配件”来使它们按照我的期望工作。此包包括以下内容

  • 磁带清洁(例如:敏感数据)
  • 过期并警告或错误提示陈旧的磁带
  • 设置磁带目录
  • 设置和拆除VCR测试

安装

# Install in your project
composer require --dev justintime50/vcr-accessories

# Install locally
composer install

用法

bootstrap.php

use allejo\VCR\VCRCleaner;
use VCR\VCR;
use VCRAccessories\CassetteScrubber;
use VCRAccessories\CassetteSetup;

const CASSETTE_DIR = 'tests/cassettes';
CassetteSetup::setupCassetteDirectory(CASSETTE_DIR);

VCR::configure()->setCassettePath(CASSETTE_DIR)
    ->setStorage('yaml')
    ->setMode('once')
    ->setWhiteList(['vendor/guzzle']);

const REDACTED_STRING = '<REDACTED>';

// SCRUBBERS must be a multidimensional array where the first index of each nested array is the key
// you want to scrub and the second index is what you want it to be replaced with before persisting to disk
define('SCRUBBERS', [
    ['origin', REDACTED_STRING],
]);

VCRCleaner::enable([
    'response' => [
        'bodyScrubbers' => [
            function ($responseBody) {
                $responseBodyJson = json_decode($responseBody, true);
                $responseBodyEncoded = CassetteScrubber::scrubCassette(SCRUBBERS, $responseBodyJson);

                // Re-encode the data so we can properly store it in the cassette
                return json_encode($responseBodyEncoded);
            }
        ],
    ],
]);

测试文件

use VCRAccessories\CassetteSetup;

public static function setUpBeforeClass(): void
{
    CassetteSetup::setupVcrTests();
}

public static function tearDownAfterClass(): void
{
    CassetteSetup::teardownVcrTests();
}

public function myTest()
{
    CassetteSetup::setupCassette(
        cassetteName: 'nameOfCassette.yaml', 
        expirationDays: 180, 
        expirationError: true
    );

    // Your test here
}

开发

# Install dependencies
composer install

# Lint
composer lint
composer fix
composer phpstan

# Test
composer test
composer coverage