jasny/codeception-module

此包已被废弃,不再维护。没有建议的替代包。

Jasny MVC 的 Codeception 模块

v1.3.0 2020-01-10 02:11 UTC

README

Build Status Scrutinizer Code Quality Code Coverage SensioLabsInsight Packagist Stable Version Packagist License

此模块允许您使用 Jasny MVC 运行测试。

安装

通过命令行

composer require --dev jasny/codeception-module

通过 composer.json

{
  "require-dev": {
    "jasny/codeception-module": "^1.0"
  }
}

配置

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\ServerRequestInterfacePsr\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 这样的超全局变量并使用 echoheaders() 输出的代码。

使用 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 客户端