creativestyle / app-http-server-mock
一个基于PHP cli-server的简易应用HTTP服务器,用于测试
v1.0
2018-11-22 21:22 UTC
Requires
- php: >=7.1.0
Requires (Dev)
- ext-json: *
- guzzlehttp/guzzle: ~6.3
- phpunit/phpunit: ~6.2
- symfony/http-foundation: ~3.0
- symfony/process: ^4.1
This package is auto-updated.
Last update: 2024-09-23 10:51:07 UTC
README
用于测试的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
子目录 - 应该都是一目了然的。