creativestyle/app-http-server-mock

一个基于PHP cli-server的简易应用HTTP服务器,用于测试

v1.0 2018-11-22 21:22 UTC

This package is auto-updated.

Last update: 2024-09-23 10:51:07 UTC


README

Travis Build Status

用于测试的PHP HTTP应用服务器

此库允许在单元/集成测试中查询HTTP端点,而无需启动整个web服务器。

它使用PHP内置的web服务器,但完全透明,您无需担心任何事情。

使用方法

警告 必须将其作为composer依赖项安装 - 如果您只是将其放入,则可能无法正常工作。

composer require --dev creativestyle/app-http-server-mock

现在您需要继承Creativestyle\AppHttpServerMock\Server并实现唯一的抽象方法registerRequestHandlers

<?php

namespace YourNamespace;

use Creativestyle\AppHttpServerMock\Server;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class YourTestServer extends Server
{
    protected function registerRequestHandlers()
    {
        $this->registerRequestHandler('GET', '/', function(Request $request) {
            return new Response('Hello');
        });
        
        $this->registerRequestHandler(['PUT', 'POST'], '/number/(?<num>\d+)/test', function(Request $request, array $args) {
            return [
                'arrays' => [
                    'are',
                    'transformed',
                    'into',
                    'json' => ['how' => 'automatically']
                ],
                'your_method' => $request->getMethod(),
                'your_number' => $args['num']
            ];
        });
    }
}

现在您可以在测试中使用您的服务器

<?php

namespace YouNamespace\Tests;

use YourNamespace\YourTestServer;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ConnectException;
use PHPUnit\Framework\TestCase;

class YourTest extends TestCase
{
    /**
     * @var YourTestServer
     */
    private static $testServer;

    public static function setUpBeforeClass()
    {
        self::$testServer = new YourTestServer();
        self::$testServer->start();
    }

    public static function tearDownAfterClass()
    {
        self::$testServer->stop();
    }

    private function getClient()
    {
        return new Client([
            'base_uri' => self::$testServer->getBaseUrl(),
            'http_errors' => false
        ]);
    }

    public function testSomething()
    {
        $response = $this->getClient()->get('/');

        $this->assertEquals(200, $response->getStatusCode());
        $this->assertEquals('Hello', $response->getBody()->getContents());
    }
}

当然,您可以在setUp()tearDown()方法中使用服务器,但从性能角度考虑,这不是最佳选择,因为服务器将在每个测试之前/之后启动/停止。

要获取更多使用示例并了解可能的功能,请查看此包的/tests子目录 - 应该都是一目了然的。