jasny / codeception-module
Jasny MVC 的 Codeception 模块
Requires
- php: >=7.2.0
- codeception/codeception: ^4.0
- codeception/lib-innerbrowser: ^1.2
- jasny/http-message: ^1.3
- jasny/router: ^1.1
- psr/container: ^1.0
- symfony/http-client: ^5.0
Requires (Dev)
- codeception/module-rest: ^1.0
- jasny/controller: ^1.0
- jasny/error-handler: ^0.2
- jasny/php-code-quality: ^2.1
- jasny/view: ^1.1.0
- mouf/picotainer: ^1.1
- twig/twig: ^1.29
This package is auto-updated.
Last update: 2023-06-09 12:06:00 UTC
README
此模块允许您使用 Jasny MVC 运行测试。
安装
通过命令行
composer require --dev jasny/codeception-module
通过 composer.json
{ "require-dev": { "jasny/codeception-module": "^1.0" } }
配置
- container: 返回一个
Interop\Container\ContainerInterface
的文件路径。
class_name: FunctionalTester modules: enabled: - \Helper\Functional - \Jasny\Codeception\Module: container: tests/_data/container.php - REST: depends: \Jasny\Codeception\Module
容器
容器是一个处理依赖注入的对象。它必须是一个实现了 Interop\Container\ContainerInterface
的对象。如果你的项目没有使用依赖注入容器,可以使用随此 Codeception 模块自动安装的 Picotainer。
容器必须包含一个 Jasny\RouterInterface
项。
使用 Picotainer 的 container.php
示例。
use Mouf\Picotainer\Picotainer; use Jasny\Router; use Jasny\Router\Routes\Glob as Routes; use Jasny\RouterInterface; return new Picotainer([ RouterInterface::class => function() { return new Router(new Routes([ '/' => ['controller' => 'foo'], // ... ])); } ]);
容器可能包含一个 Psr\Http\Message\ServerRequestInterface
和 Psr\Http\Message\ResponseInterface
项。
use Mouf\Picotainer\Picotainer; use Jasny\Router; use Jasny\Router\Routes\Glob as Routes; use Jasny\RouterInterface; use Jasny\HttpMessage\ServerRequest; use Jasny\HttpMessage\Response; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; return new new Picotainer([ RouterInterface::class => function() { return new Router(new Routes([ '/' => ['controller' => 'foo'], // ... ])); }, ServerRequestInterface::class => function() { return new ServerRequest(); }, ResponseInterface::class => function() { return new Response(); } ]);
旧代码
Jasny PSR-7 http 消息实现能够通过 绑定到全局环境 来处理旧代码。
这允许测试访问像 $_GET
和 $_POST
这样的超全局变量并使用 echo
和 headers()
输出的代码。
使用 withGlobalEnvironment(true)
为请求和响应对象。Codeception 模块将确保在每次测试后开始输出缓冲区并恢复一切。
use Mouf\Picotainer\Picotainer; use Jasny\Router; use Jasny\Router\Routes\Glob as Routes; use Jasny\RouterInterface; use Jasny\HttpMessage\ServerRequest; use Jasny\HttpMessage\Response; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; return new Picotainer([ RouterInterface::class => function() { return new Router(new Routes([ '/' => ['controller' => 'foo'], // ... ])); }, ServerRequestInterface::class => function() { return (new ServerRequest())->withGlobalEnvironment(true); }, ResponseInterface::class => function() { return (new Response())->withGlobalEnvironment(true); } ]);
错误处理器
容器还可以包含一个 Jasny 错误处理器。如果错误处理器捕获到致命错误,输出通常是针对最终用户的友好信息。它不包含有关错误本身的信息。
如果容器有一个 Jasny\ErrorHandlerInterface
对象,它将在失败的测试中输出错误作为调试信息。要查看错误,请在运行 composer run
时使用 --debug
标志。
use Mouf\Picotainer\Picotainer; use Jasny\Router; use Jasny\Router\Routes\Glob as Routes; use Jasny\RouterInterface; use Jasny\ErrorHandler; use Jasny\ErrorHandlerInterface; return new Picotainer([ RouterInterface::class => function($container) { $router = new Router(new Routes([ '/' => ['controller' => 'foo'], // ... ])); $errorHandler = $container->get(ErrorHandlerInterface::class); $router->add($errorHandler->asMiddleware()); return $router; }, ErrorHandlerInterface::class => function() { $errorHandler = new ErrorHandler(); $errorHandler->logUncaught(E_PARSE | E_ERROR | E_WARNING | E_USER_WARNING); $errorHandler->logUncaught(Exception::class); $errorHandler->logUncaught(Error::class); // PHP7 only return $errorHandler; }); ]);
API
- container - 容器
- client - BrowserKit 客户端