serato/slimulator

本软件包最新版本(v2.0.0)没有提供许可证信息。

一个用于使用 Slim PHP Web 框架的 Web 应用程序的模拟请求工具

v2.0.0 2024-07-09 01:08 UTC

This package is auto-updated.

Last update: 2024-09-09 01:31:09 UTC


README

Latest Stable Version

一个辅助测试使用 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 请求环境,以及修改后的 RequestUploadedFile 类,以便与从 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();

将请求实体体添加到请求环境中

请求实体体可以添加到 PUTPOST 请求中。支持不同的 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);