serato / slimulator
一个用于使用 Slim PHP Web 框架的 Web 应用程序的模拟请求工具
Requires
- php: ^7.1 || ^8.2
- slim/slim: ^3.5.0
Requires (Dev)
- aws/aws-sdk-php: ^3.0
- enlightn/security-checker: ^1.4 || ^2
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^7 || ^8
- squizlabs/php_codesniffer: ^3
This package is auto-updated.
Last update: 2024-09-09 01:31:09 UTC
README
一个辅助测试使用 Slim PHP Web 框架的 Web 应用的库。
需求
- PHP 7.1 或更高版本
- 已测试与 Slim >= 3.8.x 兼容。
- 目前尚未测试与 Slim >= 4.x.x 兼容
安装
通常,安装包括将库添加到项目的 composer.json
文件中
{ "require": { "serato/slimulator": "^1.0" } }
简介
Slimulator 的目的是帮助测试 Slim Web 应用程序。
它提供了一个 EnvironmentBuilder
类,用于程序化创建 PHP 请求环境,以及修改后的 Request
和 UploadedFile
类,以便与从 EnvironmentBuilder
类创建的请求环境一起使用。
这使得为测试目的创建完整的 Request
对象变得更加简单,同时也简化了模拟整个 Slim 应用程序请求执行并检查返回的 Response
对象的过程。
用法
创建请求环境
使用 Serato\Slimulator\EnvironmentBuilder
程序化地定义一个请求
use Serato\Slimulator\EnvironmentBuilder; $envBuilder = EnvironmentBuilder::create() ->setRequestMethod('GET') ->setUri('http://my.server/my/uri?var1=val1') ->addGetParam('var2', 'val2') ->addHeader('Cache-Control', 'no-cache') ->addCookie('my_session', 'session_vars');
从 Serato\Slimulator\EnvironmentBuilder
实例获取数组表示(相当于 PHP 超全局变量 $_SERVER
)
use Serato\Slimulator\EnvironmentBuilder; $envBuilder = EnvironmentBuilder::create()->setUri('http://my.server/my/uri?var1=val1'); $server = $envBuilder->getEnv();
从 Serato\Slimulator\EnvironmentBuilder
实例创建一个 Slim\Http\Environment
对象
use Serato\Slimulator\EnvironmentBuilder; $envBuilder = EnvironmentBuilder::create()->setUri('http://my.server/my/uri?var1=val1'); $env = $envBuilder->getSlimEnvironment();
将请求实体体添加到请求环境中
请求实体体可以添加到 PUT
和 POST
请求中。支持不同的 Content-Type
use Serato\Slimulator\EnvironmentBuilder; use Serato\Slimulator\RequestBody\UrlEncoded; use Serato\Slimulator\RequestBody\Multipart; use Serato\Slimulator\RequestBody\Json; use Serato\Slimulator\RequestBody\Xml; // Create a request body using `application/x-www-form-urlencoded` encoding $body = UrlEncoded::create(['var1' => 'val1', 'var2' => 'val2']); // Create a request body with an `application/json` content type $body = Json::create(['var1' => 'val1', 'var2' => 'val2']); // Can also be created from a JSON string $body = Json::create('{"var1":"val1","var2":"val2"}'); // Create a request body with an `application/xml` content type $body = Xml::create('<xml><var1>val1</var1><var2>val2</var2></xml>'); // Create a multipart request body $body = Multipart::create() ->addParam('var1', 'val1') // Add a name/value pair ->addFile('file1', '/my/local/file/path'); // Add a file // Add the body to a request environment $envBuilder = EnvironmentBuilder::create() ->setRequestMethod('POST') ->setUri('http://my.server/my/uri') ->setRequestBody($body);
将授权方案添加到请求环境中
有两个方便的类用于将常用的授权方案添加到请求环境中
use Serato\Slimulator\EnvironmentBuilder; use Serato\Slimulator\Authorization\BasicAuthorization; use Serato\Slimulator\Authorization\BearerToken; // Create a request environment that uses `Basic` authorization $envBuilder = EnvironmentBuilder::create() ->setUri('http://my.server/my/uri') ->setAuthorization(BasicAuthorization::create('myuser', 'mypass')); // Create a request environment that uses a `Bearer` token $envBuilder = EnvironmentBuilder::create() ->setUri('http://my.server/my/uri') ->setAuthorization(BearerToken::create('mytoken'));
从 EnvironmentBuilder 实例创建请求对象
Serato\Slimulator\Request
通过添加一个静态方法扩展了 Slim\Http\Request
,使其可以从 EnvironmentBuilder
实例创建
use Serato\Slimulator\EnvironmentBuilder; use Serato\Slimulator\Request; $envBuilder = EnvironmentBuilder::create()->setUri('http://my.server/my/uri'); $request = Request::createFromEnvironmentBuilder($envBuilder);
模拟 Slim 应用程序请求执行
一旦使用 EnvironmentBuilder
创建了请求环境,模拟整个 Slim 应用程序请求执行的过程就非常简单
use Slim\App; use Serato\Slimulator\EnvironmentBuilder; use Serato\Slimulator\Request; // Create the app... $app = new App(); // ...and get the DI container $container = $app->getContainer(); // Create an EnvironmentBuilder in the container $container['environmentBuilder'] = function () { return EnvironmentBuilder::create()->setUri('http://my.server/my/uri'); } // Replace the default `environment` in the container with our constructed // environment created out of the EnvironmentBuilder instance $container['environment'] = function ($c) { return $c->get('environmentBuilder')->getSlimEnvironment(); }; // And do the same for the container's default `request` object $container['request'] = function ($c) { return Request::createFromEnvironmentBuilder( $c->get('environmentBuilder') ); }; // Add routes, middleware, handlers etc // ... // Get the `response` object by calling App::run with the `$silent` argument set to `true`. $response = $app->run(true);