tijmenwierenga/guzzle-mock-handler

更好的Guzzle模拟处理器

v0.0.3 2021-02-09 10:04 UTC

This package is auto-updated.

Last update: 2024-09-20 09:43:44 UTC


README

Build status

Buy us a tree

尽管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