korchasa / php-vhs
HTTP request/response recording and mock library for PHP
Installs: 2 804
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/korchasa/php-vhs
Requires
- php: >=7.1
- ext-json: *
- korchasa/matcho: ^1.1
Requires (Dev)
- guzzlehttp/guzzle: ^6.3
- infection/infection: ^0.12
- phpstan/phpstan: ^0.10
- phpunit/phpunit: ^6.0 || ^7.0
- rappasoft/laravel-helpers: dev-master
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^2.9.2 || ^3.3.1
This package is auto-updated.
Last update: 2022-09-23 18:03:51 UTC
README
Install:
composer require --dev korchasa/php-vhs
Client testing:
1. Write test with VhsTestCase trait. Surround client calls with assertVhs().
<?php declare(strict_types=1); namespace korchasa\Vhs\Tests; use korchasa\Vhs\VhsTestCase; use PHPUnit\Framework\TestCase; class AwesomeClientOfflineTest extends TestCase { use VhsTestCase; /** @var AwesomeClient */ private $packagistClient; public function setUp() { $client = new AwesomeClient("bla-bla-bla-bla-bla-bla.commmm"); $client->setGuzzle($this->connectVhs($client->getGuzzle(), $offline = true)); $this->packagistClient = $client; } public function testSuccessStory(): void { $this->assertVhs(function () { $packageName = $this->packagistClient->getFirstTagName(); $this->assertEquals('korchasa/php-vhs', $packageName); }); } public function testWithFail(): void { $this->assertVhs(function () { $resp = $this->packagistClient->auth(); $this->assertEquals(403, $resp); }); } }
2. Run test to record cassette (test will be incomplete)
Cassette tests/vhs_cassettes/AwesomeClientOfflineTest_testSuccessStory.json content:
[
    {
        "request": {
            "uri": "https:\/\/httpbin.org\/anything?name=korchasa\/php-vhs",
            "method": "GET",
            "headers": {
                "X-Foo": [
                    "Bar"
                ],
                "Host": [
                    "httpbin.org"
                ]
            },
            "body": "",
            "body_format": "raw"
        },
        "response": {
            "status": 200,
            "headers": {
                "Content-Type": [
                    "application\/json"
                ]
            },
            "body": {
                "args": {
                    "name": "korchasa\/php-vhs"
                },
                "data": "",
                "files": {},
                "form": {},
                "headers": {
                    "Host": "httpbin.org",
                    "User-Agent": "***",
                    "X-Foo": "Bar"
                },
                "json": null,
                "method": "GET",
                "origin": "***",
                "url": "https:\/\/httpbin.org\/anything?name=korchasa%2Fphp-vhs"
            },
            "body_format": "json"
        }
    }
]
3. Run test again
If the cassette is already exists, then we will check the request and replace the response to the one recorded in the cassette.