slim3 中的控制器单元测试

2024-02-04

首先,我想说 - 我是 PHP (phpunit) 单元测试的新手。 在我的新项目(slim3 框架)中,我想测试我的控制器,例如 LoginController。

我的想法是(在单元测试方法中)

  • 创建实例LoginController
  • 模拟控制器中的一些服务(DI)
  • 执行方法是对请求的响应(在我的控制器方法中__invoke)

我的问题是关于参数__invoke方法。 在 Slim3 中,请求的可调用方法有两个第一个参数:

RequestInterface $request and ResponseInterface $response

如何在单元测试类中创建此参数?我正在寻找这个问题的一些例子,但没有成功。

有什么建议么?

我在 Slim3 测试中找到了一些模拟请求的代码:

protected function requestFactory()
{
    $uri = Uri::createFromString('https://example.com:443/foo/bar?abc=123');
    $headers = new Headers();
    $cookies = array(
        'user' => 'john',
        'id' => '123',
    );
    $env = Slim\Http\Environment::mock();
    $serverParams = $env->all();
    $body = new Body(fopen('php://temp', 'r+'));
    $request = new Request('GET', $uri, $headers, $cookies, $serverParams, $body);

    return $request;
}

但我不确定这是个好方法。

谢谢你的帮助


我在这里写了一种解决方案:https://akrabat.com/testing-slim-framework-actions/ https://akrabat.com/testing-slim-framework-actions/

I use Environment::mock()创建一个$request然后我就可以运行这个动作了。使每个路由可调用为一个类,其中所有依赖项都被注入到构造函数中,这也使这一切变得更加容易。

本质上,测试如下所示:

class EchoActionTest extends \PHPUnit_Framework_TestCase
{
    public function testGetRequestReturnsEcho()
    {
        // instantiate action
        $action = new \App\Action\EchoAction();

        // We need a request and response object to invoke the action
        $environment = \Slim\Http\Environment::mock([
            'REQUEST_METHOD' => 'GET',
            'REQUEST_URI' => '/echo',
            'QUERY_STRING'=>'foo=bar']
        );
        $request = \Slim\Http\Request::createFromEnvironment($environment);
        $response = new \Slim\Http\Response();

        // run the controller action and test it
        $response = $action($request, $response, []);
        $this->assertSame((string)$response->getBody(), '{"foo":"bar"}');
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

slim3 中的控制器单元测试 的相关文章

随机推荐

  • 如何将 C++ 属性绑定到 QML 属性?

    所以我知道如何将 QML 属性绑定到 C 属性 因此当 C 调用通知信号时 QML 会更新视图 当用户使用 UI 更改某些内容时 有什么方法可以更新 C 属性吗 例如 我有一个组合框 我希望当用户更改组合框的值时更新一些 C 属性 编辑 我
  • 替换字符串的前 N ​​个点

    我希望替换掉前14个点my string有 14 个零时region 2 所有其他点应保持原样 df 1 read table text city county state region my string reg1 reg2 1 1 1
  • 从表中添加/删除行

    我有一张包含一些家属信息的表 每行都有一个添加和删除按钮来添加 删除其他家属 当我单击 添加 按钮时 一个新行会添加到表中 但是当我单击 删除 按钮时 它会首先删除标题行 然后在后续单击时删除相应的行 这是我所拥有的 JavaScript
  • 应该在哪里报告与不同 Android 设备的不兼容性?

    我开发了一个主屏幕小部件 第一个版本在 Nexus One HTC EVO 4G 和 Motorola droid 上进行了测试 工作得很好 在 Android 市场发布后 有人报告说它无法在三星 fascinate galaxy s 上运
  • “long x = 1/2”等于1还是0,为什么? [复制]

    这个问题在这里已经有答案了 如果我有类似的东西 long x 1 2 这不应该四舍五入到1吗 当我在屏幕上打印它时 它显示0 它正在进行整数除法 即截断小数点右侧的所有内容
  • Xcode4,iOS:复制了目标,为什么我无法更改标识符?

    这让我抓狂 我已经在 Xcode4 中为我的 iOS 项目复制了一个目标 然而 我的目标的摘要页面上 iOS 应用程序目标 下的目标标识符字段是不可编辑的 如何更改目标的标识符 它从产品名称中获取标识符 进入构建设置 然后向下滚动到包装部分
  • java.lang.OutOfMemoryError:带有 tomcat7 windows 服务的 PermGen 空间

    我在跑步雄猫7 0 33 on 视窗服务器 2008 R2 我安装了tomcat作为Windows服务 JDK版本 jdk1 6 0 25 64 bit 汤姆猫选项 Java虚拟机 C Program Files Java jre6 bin
  • Java中的基数方向算法

    这个周末 我花了几分钟时间研究一个算法 该算法将接收一个航向 以度为单位 并返回一个基本方向的字符串 我在我正在使用的 Android 指南针应用程序中使用它 我最终得到的是这样的 private String headingToStrin
  • 如何合并属于另一个可观察量属性的可观察量

    我有一个假期列表 每个假期都附有一个用户 ID 我想将检索到的用户数据合并到每个假期记录中 以便它返回单个可观察值 我创建了这个函数 getAllHolidaysAndUsers return this af database list H
  • Mysql函数调用

    如果我多次调用一个函数 那么它会每次都执行还是只执行一次 然后多次使用该值 例子 select my function filed my function filed field2 my function filed field1 fiel
  • 使用 Python 求解四分位数和十分位数

    Python 2 7 是否有一个可以解决四分位数和十分位数的库 numpy 似乎没有任何功能 如果有的话可以给我一个链接吗 提前致谢 D Using np百分位数 http docs scipy org doc numpy dev refe
  • 多线程curl同时处理多个连接

    curl multi 接口是否在内部生成新线程以同时处理多个请求 它是否等于手动生成线程并仅使用curl easy句柄 什么是性能更高 我需要发出最多 1000 个并发请求 https curl haxx se libcurl c mult
  • 按多对多关系的计数排序 - SQLAlchemy

    我正在使用 Flask SQLAlchemy 来查询我的 Postgres 数据库 我目前正在尝试使用以下查询来查询标题建议 res Title query filter Titles name ilike searchstring lim
  • 如何配置 playframework 服务器以支持 ssl

    如何配置 playframework 服务器以支持 ssl 例子https 本地主机 9000 https localhost 9000 如果您更喜欢使用集成方式 请参阅发行说明 http www playframework org doc
  • 启动进程并监听退出事件

    我有一些代码启动一个进程并连接一个事件处理程序来处理进程退出时的情况 我的代码是用 C 编写的 我想知道 Delphi 是否可以实现类似的功能 System Diagnostics Process myProcess new System
  • YouTube 数据 API v3 评论列表

    我正在使用 YouTube V3 0 API 调用来下载特定 YouTube 频道 例如 Apple YouTube 频道 的 JSON 信息源 现在 我已经设法拥有视频列表和所有内容 但如果可能的话 我还想获得对视频的评论或其中一些评论
  • 有没有办法将外部 URL 分配给超链接而不附加 http:// 或 https://(即协议)?

    我有一个像这样定义的超链接
  • 如何更改我的计算机的文化信息

    我正在 IIS 上运行一个站点 该站点从 Thread CurrentThread CurrentCulture 读取区域性信息 这来自我所理解的系统文化信息 我需要将其设置为某个值 但我无法在操作系统级别更改它 我的 Windows 7
  • Laravel 5:如何将本地文件复制到 Amazon S3?

    我正在 Laravel 5 中编写代码来定期备份 MySQL 数据库 到目前为止我的代码如下所示 filename database backup date G a m d y sql destination storage path ba
  • slim3 中的控制器单元测试

    首先 我想说 我是 PHP phpunit 单元测试的新手 在我的新项目 slim3 框架 中 我想测试我的控制器 例如 LoginController 我的想法是 在单元测试方法中 创建实例LoginController 模拟控制器中的一