dshafik/guzzlehttp-vcr

dev-master 2017-04-04 22:12 UTC

This package is auto-updated.

Last update: 2024-09-12 04:15:09 UTC


README

LicenseTravis CI Status Scrutinizer Code Quality

Guzzle VCR

基于 PHP•VCR 的想法,这个 Guzzle 中间件将记录响应并在后续请求中回放。

这个中间件很简单,它会简单地按照顺序回放响应以响应 任何 请求。这对于测试具有基于时间的身份验证的客户端很有用,这些客户端需要生成动态请求,但仍希望测试响应处理的可预测性。

安装

要添加到项目中,请使用 composer

$ composer require dshafik/guzzlehttp-vcr

用法

它的用法与 Guzzles 的 \GuzzleHttp\Handler\MockHandler 相似,实际上它使用 MockHandler 来回放记录的请求。调用 Dshafik\GuzzleHttp\VcrHandler::turnOn() 方法将返回一个标准 GuzzleHttp\HandlerStack 实例,该实例已将 VcrHandlerMockHandler(带有加载的请求)添加为中间件。

然后,您可以将处理程序作为 GuzzleHttp\Client 处理程序选项传入,无论是通过构造函数还是通过单个请求。

脚本终止时或下一次调用 VcrHandler::turnOn()(针对该记录)时,将停止录制。

<?php
class ApiClientTest {
    public function testSomething() {
        $vcr = \Dshafik\GuzzleHttp\VcrHandler::turnOn(__DIR__ . '/fixtures/somethingtest.json');
        $client = new \GuzzleHttp\Client(['handler' => $vcr]);

        $client->get('/test');
    }
}
?>

在这个例子中,如果 fixture 存在,它将使用 MockHandler 来响应 任何 请求,直到它耗尽可能的响应。一旦耗尽响应,它将在下一个请求上抛出 \OutOfBoundsException 异常。

要更新 fixture,只需删除文件并重新运行测试。

Fixture

Fixture 是简单的 JSON 文件,您可以手动编辑或创建。

[
    {
        "body": "Hello World",
        "headers": {
            "Connection": [
                "keep-alive"
            ],
            "Date": [
                "Fri, 21 Aug 2015 01:10:34 GMT"
            ],
            "Transfer-Encoding": [
                "chunked"
            ],
            "X-VCR-Recording": [
                "1440119434"
            ]
        },
        "reason": "OK",
        "status": 200,
        "version": "1.1"
    }
]

录制与原始响应之间的唯一区别是添加了一个包含录制时间的 UNIX 时间戳的 X-VCR-Recording 标头。

运行测试

此库的单元测试使用 Guzzle 内置的 Node.js 服务器,这意味着您 必须 使用 --prefer-source 标志进行安装,否则测试源将不会包含在内。

要运行单元测试,只需在存储库根目录中运行 phpunit

 $ phpunit
 PHPUnit 4.8.5 by Sebastian Bergmann and contributors.
 
 Runtime:	PHP 5.6.10 with Xdebug 2.3.3
 Configuration:	/Users/dshafik/src/guzzlehttp-vcr/phpunit.xml.dist
 
 ....
 
 Time: 2.94 seconds, Memory: 9.00Mb
 
 OK (5 tests, 62 assertions)