tijmenwierenga / guzzle-mock-handler
更好的Guzzle模拟处理器
Requires
- php: ^7.4|^8.0
- guzzlehttp/promises: ^1.3
- psr/http-message: ^1.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.2
- phpstan/phpstan: ^0.12.8
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^4.4
This package is auto-updated.
Last update: 2024-09-20 09:43:44 UTC
README
尽管Guzzle HTTP客户端自带基本的模拟处理器,但在某些情况下可能不够强大。例如,当您的请求没有按照预期的顺序到达时。这就是这个模拟处理器可能派上用场的地方。
您将能够设置对传入请求的期望。当满足期望时,将返回预定义的响应。
需求
最低PHP版本是7.4。
安装
通常,您会想将此软件包作为开发依赖项安装
composer install tijmenwierenga/guzzle-mock-handler --dev
如果您想为生产环境安装此软件包
composer install tijmenwierenga/guzzle-mock-handler
使用
实例化处理器
模拟处理器的工作方式与官方Guzzle模拟处理器类似。将其添加到HandlerStack
的处理器中,所有请求都将传递到处理器。
<?php use GuzzleHttp\Client; use TijmenWierenga\Guzzle\Mocking\MockHandler; $mockHandler = new MockHandler(); $handlerStack = GuzzleHttp\HandlerStack::create($mockHandler); $client = new Client(['handler' => $handlerStack]);
添加期望
使用ExpectationBuilder
来设置请求期望
<?php use GuzzleHttp\Psr7\Response; use Psr\Http\Message\RequestInterface; use TijmenWierenga\Guzzle\Mocking\MockHandler; /** @var MockHandler $mockHandler */ $mockHandler ->when(fn (RequestInterface $request): bool => $request->getMethod() === 'GET') ->respondWith(new Response(200));
每当新的请求传递给模拟处理器时,它将检查是否存在与请求匹配的期望。在匹配的情况下,处理器将返回相应的响应。在上面的示例中,模拟处理器将在每个GET请求上返回一个空的200 OK响应。
当没有期望与请求匹配时,模拟处理器将抛出TijmenWierenga\Guzzle\Mocking\UnexpectedRequestException
。
调用限制
您可能想要限制期望的调用次数。默认情况下,没有设置调用限制。通过构建器上的withMaxInvocations()
方法,ExpectationBuilder
可以限制响应可以返回的次数。
<?php use GuzzleHttp\Psr7\Response; use Psr\Http\Message\RequestInterface; use TijmenWierenga\Guzzle\Mocking\MockHandler; /** @var MockHandler $mockHandler */ $mockHandler ->when(fn (RequestInterface $request): bool => $request->getMethod() === 'GET') ->withMaxInvocations(1) ->respondWith(new Response(200));
在上面的示例中,即使它满足定义的条件,响应也只会返回一次。在第一次调用之后,处理器将抛出TijmenWierenga\Guzzle\Mocking\UnexpectedRequestException
。
内置条件
该软件包附带了一些内置条件。这些条件可以以表达性的方式创建期望。
全部
虽然传递一个可调用项并匹配多个条件是完全有效的,但使用全部
条件更为表达。该条件接受任何数量的条件,所有这些条件都需要根据当前请求匹配。
use GuzzleHttp\Psr7\Response; use Psr\Http\Message\RequestInterface; use TijmenWierenga\Guzzle\Mocking\Conditions\All; use TijmenWierenga\Guzzle\Mocking\MockHandler; /** @var MockHandler $mockHandler */ $mockHandler ->when( new All( fn (RequestInterface $request): bool => $request->getMethod() === 'GET', fn (RequestInterface $request): bool => $request->getUri()->getHost() === 'google.com' ) ) ->respondWith(new Response(200));
任意
该条件接受任何数量的条件。当提供的任何条件满足时,将返回预定义的响应。
use GuzzleHttp\Psr7\Response; use Psr\Http\Message\RequestInterface; use TijmenWierenga\Guzzle\Mocking\Conditions\Any; use TijmenWierenga\Guzzle\Mocking\MockHandler; /** @var MockHandler $mockHandler */ $mockHandler ->when( new Any( fn (RequestInterface $request): bool => $request->getMethod() === 'GET', fn (RequestInterface $request): bool => $request->getMethod() === 'POST', ) ) ->respondWith(new Response(200));
更多条件可以在Conditions
文件夹中找到。
Treeware
您可以使用此软件包,但如果它进入您的生产环境,您需要为世界买一棵树。
众所周知,解决气候危机并防止我们的温度上升到1.5C以上最好的工具之一是种树。如果您支持此软件包并为Treeware森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。
您可以在offset.earth/treeware这里购买树木
有关Treeware的更多信息,请访问treeware.earth