meare/juggler

此软件包已被废弃,不再维护。没有建议替代软件包。

Mountebank 的 PHP 客户端

v1.0 2017-01-17 22:10 UTC

This package is auto-updated.

Last update: 2021-03-31 10:29:40 UTC


README

Latest Version on Packagist Software License Build Status Code Coverage Scrutinizer Code Quality

Juggler 是 mountebank 的 PHP 客户端,mountebank 是一种开源工具,可以在网络上提供测试替身。Juggler 允许您

  • 与 mountebank API 交互;
  • 验证模拟;
  • 修改和构建冒充者;

目前只支持 HTTP 冒充者。

还有一个可用的 Codeception 模块

安装

通过 Composer

$ composer require meare/juggler:~1.0

用法

API 交互

Juggler 使与 mountebank API 交互变得简单

use Meare\Juggler\Juggler;

$juggler = new Juggler('localhost');

// Delete active imposters before posting to avoid resource conflicts
$juggler->deleteImposters();
$port = $juggler->postImposterFromFile(__DIR__ . '/contract.json');

// Retrieve imposter contract and save it to file
$juggler->retrieveAndSaveContract($port, __DIR__ . '/retrieved_contract.json');

$juggler->deleteImposter($port);

模拟验证

mountebank 记录了如果设置 --mock 命令行标志,冒充者收到的每个请求。

以下是使用 Juggler 验证模拟的方法

use Meare\Juggler\Juggler;

$juggler = new Juggler('localhost');

// Post imposter
$port = $juggler->postImposterFromFile(__DIR__ . '/contract.json');

// Do some requests
file_get_contents('http://mountebank:4545/foo?bar=1');
file_get_contents('http://mountebank:4545/foo?bar=2&zar=3');

// Retrieve imposter and verify it received requests
$imposter = $juggler->getHttpImposter($port);
$imposter->hasRequestsByCriteria([
    'method' => 'GET',
    'path'   => '/foo',
    'query'  => ['bar' => 1],
]); // Will return true

更多信息请参见模拟验证

修改冒充者

想象一下,您有一个为 GET /account/3 返回账户余额的存根

{
  "port": 4545,
  "protocol": "http",
  "stubs": [
    {
      "responses": [
        {
          "is": {
            "statusCode": 200,
            "body": {
              "clientId": 3,
              "name": "Dmitar Ekundayo",
              "balance": 24.5
            },
            "_mode": "text"
          }
        }
      ],
      "predicates": [
        {
          "equals": {
            "method": "GET",
            "path": "/client/3"
          }
        }
      ]
    }
  ]
}

在某个时刻,您可能不希望为模拟负余额创建单独的存根。修改冒充者就可以做到这一点

use Meare\Juggler\Juggler;

$juggler = new Juggler('localhost');
$port = $juggler->postImposterFromFile(__DIR__ . '/contract.json');

// Find stub by predicates and alter response
$imposter = $juggler->getHttpImposter($port);
$imposter->findStubByPredicates([['equals' => ['method' => 'GET', 'path' => '/account/3']]])
    ->getIsResponse()
    ->modifyBody(function (array $body) {
        $body['balance'] = -5.75;

        return $body;
    });

// Delete imposter and post again
$juggler->replaceImposter($imposter);

构建冒充者

use Meare\Juggler\Imposter\HttpImposter;
use Meare\Juggler\Imposter\Stub\Predicate\Predicate;
use Meare\Juggler\Imposter\Stub\Response\IsResponse;
use Meare\Juggler\Juggler;

$juggler = new Juggler('localhost');

// Create imposter with a stub for GET /test-endpoint
$imposter = new HttpImposter;
$imposter->createStub(
    [new IsResponse(200, ['Content-type' => 'application/json'], '{"status":200}')],
    [new Predicate(Predicate::OPERATOR_EQUALS, ['method' => 'GET', 'path' => '/test-endpoint'])]
);

// Post it!
$juggler->postImposter($imposter);

测试

$ composer test

致谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件