dshafik / guzzlehttp-vcr
Requires
- php: >=5.5
- guzzlehttp/guzzle: ^6.0
Requires (Dev)
- phpunit/phpunit: ^4.8
This package is auto-updated.
Last update: 2024-09-12 04:15:09 UTC
README
Guzzle VCR
基于 PHP•VCR 的想法,这个 Guzzle 中间件将记录响应并在后续请求中回放。
这个中间件很简单,它会简单地按照顺序回放响应以响应 任何 请求。这对于测试具有基于时间的身份验证的客户端很有用,这些客户端需要生成动态请求,但仍希望测试响应处理的可预测性。
安装
要添加到项目中,请使用 composer
$ composer require dshafik/guzzlehttp-vcr
用法
它的用法与 Guzzles 的 \GuzzleHttp\Handler\MockHandler
相似,实际上它使用 MockHandler
来回放记录的请求。调用 Dshafik\GuzzleHttp\VcrHandler::turnOn()
方法将返回一个标准 GuzzleHttp\HandlerStack
实例,该实例已将 VcrHandler
或 MockHandler
(带有加载的请求)添加为中间件。
然后,您可以将处理程序作为 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)