如何对 Slim 框架应用程序进行单元测试

2024-05-03

我一直在尝试对修改其他人代码的示例进行单元测试,每次我到达测试运行时都没有错误的程度 - 当我期望它们通过时,我只是遇到相同的失败。网上没有大量文档,我真的不知道还能去哪里。任何人都可以看到我的代码哪里出错了:

bootstrap.php(phpunit引导文件)

这基本上只是 $app 对象的容器。我使用启动实际应用程序的相同文件(路由、配置)启动 $app 对象。

<?php
/**
 * This makes our life easier when dealing with paths. Everything is relative
 * to the application root now.
 */
chdir(dirname('../'));

// require composer autoloader for loading classes
require 'vendor/autoload.php';

// app container class - singleton pattern
class App
{
     // Hold an instance of the class
    private static $instance;

    public static function getInstance()
    {
        if (!isset(self::$instance)) {
            // Instantiate a Slim application:
            $app = new \Slim\Slim(array(
                'mode' => getenv('APPLICATION_ENV') ?: 'production',
            ));

            // set configuration
            require 'app/config.php';

            // include the routes (always after we've instantiated our app instance)
            require 'app/routes.php';

            self::$instance = $app;
        }
        return self::$instance;
    }
}

接下来是我的测试文件,其中包含一个测试:

AccountsControllerTest.php

<?php

use Slim\Environment;

class AccountsControllerTest extends PHPUnit_Framework_TestCase {

    public static function get($path)
    {
        Environment::mock(array(
            'REQUEST_METHOD' => 'GET',
            'PATH_INFO' => $path,
        ));

        $app = App::getInstance();

        //$app->middleware[0]->call();
        $app->response()->finalize();
        return $app->response();
    }

    public function testIndex() {

        $response = $this->get('/accounts');

        $this->assertContains('Accounts', $response->getBody());
    }
}

希望我想做什么有点清楚。基本上只需检查“帐户”是否存在(当我在浏览器中加载时,该帐户就存在)

下面是我返回的结果:

$ vendor/bin/phpunit
PHPUnit 4.3.4 by Sebastian Bergmann.

Configuration read from /var/www/shared-views-slim/phpunit.xml

F

Time: 33 ms, Memory: 4.75Mb

There was 1 failure:

1) AccountsControllerTest::testIndex
Failed asserting that '' contains "Accounts".

/var/www/shared-views-slim/tests/app/controllers/AccountsControllerTest.php:30

FAILURES!                            
Tests: 1, Assertions: 1, Failures: 1.

UPDATE:

路线.php

<?php

// Define a HTTP GET route:
$app->group('/accounts', function () use ($app) {

    $controller = new App\Controllers\AccountsController($app);

    // index

    $app->get('/', function () use ($controller) {
        $controller->index();
    });

    // show

    $app->get('/:id', function ($id) use ($controller) {
        $controller->show($id);
    })->conditions(array('id' => '[1-9]([0-9]*)'));

    // create

    // form
    $app->get('/create', function () use ($controller) {
        $controller->create();
    });    

    // action
    $app->post('/', function () use ($controller) {
        $controller->create();
    });

    // update

    // form
    $app->get('/:id/edit', function ($id) use ($controller) {
        $controller->update($id);
    })->conditions(array('id' => '[1-9]([0-9]*)')); 

    // action
    $app->put('/:id', function ($id) use ($controller) {
        $controller->update($id);
    });

    // delete

    // form
    $app->get('/:id/delete', function ($id) use ($controller) {
        $controller->delete($id);
    })->conditions(array('id' => '[1-9]([0-9]*)')); 

    //action
    $app->delete('/:id', function ($id) use ($controller) {
        $controller->delete($id);
    });

});

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对 Slim 框架应用程序进行单元测试 的相关文章

  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • mysqli bind_param 中的 NULL 是什么类型?

    我正在尝试将参数绑定到 INSERT INTO MySQLi 准备好的语句 如果该变量存在 否则插入 null 然后我知道 type variable i corresponding variable has type integer d
  • 检查文件权限

    我怎样才能检查file permissions 无需通过运行操作系统特定命令passthru or exec Use 文件权限 http php net fileperms功能 clearstatcache echo substr spri
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • 如何确定当前使用哪个网格选项

    我将 Bootstrap 3 用于使用 PHP 和 HTML 创建的网页 随着响应式网格和类的开启引导程序3您可以将多个类分配给一个 div 以根据当前屏幕尺寸定义不同的宽度 例如 div class col lg 3 col md 3 c
  • 运行使用wiremock存根的多个测试用例时“选择器循环等待选择”

    我在用着wiremock http wiremock org 用于模拟网络服务 我使用它来提供对我们正在测试的某些单元的服务访问 所以基本上我们有多个junit测试 它们使用来自wiremock的存根 但是 当我们一次运行多个测试 假设运行
  • 如何在 WordPress 中按类别获取所有帖子

    我想在 WordPress 中按类别获取帖子 args array post type gt project postslist get posts args 0 gt WP Post 对象 ID gt 421 post author gt
  • 尝试获取 Google accessToken

    看起来 无论我做什么 谷歌都在竭尽全力阻止我完成这个研究项目 我的项目让我使用 Google 电子表格作为数据库 并使用所述电子表格中的数据执行程序化的 Google 图片搜索 并向最终用户显示一些结果 设置说明 我开始按照此处的说明进行操
  • Yii2 中 init() 和 __construct() 方法有什么区别

    init 方法 public function init construct method public function construct 那么 它们之间有什么区别 应该使用哪一个呢 init 是从以下对象扩展的任何对象的方法yii b
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • 如何让Gmail像加载进度条一样

    我想在页面的中心和顶部创建一个像 Gmail 一样的加载进度条 并适用于所有浏览器 这是基本代码
  • CSS 无法从带有 php“includes”的相对路径工作

    文件夹结构 index php includes header html css style css 我的主项目文件夹中有 2 个子文件夹 一个是名为 includes 的文件夹 另一个名为 css 我有我的 index php主文件夹中的
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 接口中的构造方法

    接口中的构造方法不好吗 为什么人们认为有人想要实例化接口 我们想要做的是强制实现者实现构造函数 就像其他接口方法一样 接口就像一个合同 假设我有一个接口 Queue 并且我想确保实现者创建一个带有一个参数的构造函数 该构造函数创建一个单例队
  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时
  • 使用“INSERT ... ON DUPLICATE KEY UPDATE”插入多条记录

    我的表结构 table marks 我的目标 我想用条件插入或更新多条记录 我目前正在通过此查询进行检查 第一步 SELECT FROM marks WHERE student 115 AND param 1 第二步 if records
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f

随机推荐

  • 我应该设计一个 SQL Server 数据库来依赖 UNION 还是避免它?

    执行以下 SQL 查询 SELECT Account Amount AS Deposit 0 00 AS Withdrawal Date FROM Deposits WHERE Account Account UNION SELECT Ac
  • LINQ 中的左外连接

    下面的代码不断给我一个错误消息 你调用的对象是空的 var partsWithDefaults from partsList1 in p join partsList2 in d on new PartNo partsList1 PartN
  • 向页面添加多个相同类型的用户控件

    已经有人问过与此类似的问题 但似乎没有一个问题能解决我的具体情况 这就是我正在尝试做的事情 我有一个管理学生信息的用户控件 即名字 姓氏 地址等 我有一个网页 表单 上面有一个按钮 添加学生 我想要完成的是每次单击后将新的 StudentI
  • php中有指针吗?

    这段代码是什么意思 这就是你在 php 中声明指针的方式吗 this gt entryId entryId PHP 中的变量名称以 开头 因此 entryId 是变量的名称 this是PHP面向对象编程中的一个特殊变量 它是对当前对象的引用
  • 宏中 do { } while(0) 与 ({ }) 的优点?

    Stack Overflow 上有很多关于使用的问题do while 0 在宏中 但这有点不同 我明白为什么do while 0 用于将多行代码包装在宏扩展中 但我经常看到另一种形式 The form 的优点是它是一个表达式并且可以有 返回
  • JJWT依赖混乱

    我继承了一个java项目 在POM xml中有这个
  • 如何更新 Google 表格插件

    我已对我的 已发布的 Google Sheets 插件 在脚本编辑器中 进行了更改 我创建了一个新版本并按 发布 gt 部署为附加组件 上面写着 You must configure the G Suite Marketplace SDK
  • 无法在 Google Colab 中打开从 GitHub 克隆的存储库

    我想克隆 GitHub 存储库 体验 keras yolo2 https github com experiencor keras yolo2 我按照以下命令操作 git clone https github com experiencor
  • 线性回归并将结果存储在数据框中[重复]

    这个问题在这里已经有答案了 我正在对数据框中的某些变量进行线性回归 我希望能够通过分类变量对线性回归进行子集化 对每个分类变量运行线性回归 然后将 t 统计数据存储在数据框中 如果可能的话 我想在没有循环的情况下执行此操作 这是我正在尝试做
  • 适用于 VPN 的 iOS 专用 API

    我正在寻找一些私有 API 来启动在 设置 应用程序中配置的 VPN 连接 有人有什么建议我可以在哪里找到它们吗 我唯一发现的是 ManagedConfiguration framework 这是正确的起点吗 没有任何文档 这有点困难 附
  • 脚本和链接标签的简写 http:// 为 // ?有人以前看过/用过这个吗?

    问题如下 如果您使用 addthis 共享按钮 查看任何网站 一旦您浮动在 addthis 按钮上 并且加载了所有必需的资源 请使用 firebug 或 chrome 检查器查看文档的正文 不是源代码 而是屏幕上的实际文档 对象检查器 你会
  • 监听鼠标事件……除了 div 的溢出:滚动滚动条?

    关于如何监听 mousedown 的任何建议 document exceptdiv 的溢出 滚动滚动条 我不确定滚动条是什么元素is为了参考它 您可以使用以下命令自行检查目标 document on mousedown function e
  • 使用 Asp.net 中的路由在 URL 中添加语言名称

    如何使用路由在 URL 中添加语言名称 我的网站运行于http localhost 41213 default aspxURL 成功 但该网站是多语言的 我的客户希望根据他想要的语言运行该网站http localhost 41213 en
  • 使用本地系统帐户运行时,GetAccessControl 方法失败,出现意外错误代码 3

    我已经创建了 Windows 服务并使用本地系统帐户运行它 该服务正在读取用户文件并查找其所有者 在获取文件的访问权限以查找所有者时 它抛出以下异常 方法失败 出现意外错误代码 3 StackTrace 在 System Security
  • 使用 Maven 仅下载 JAR

    我想让 Maven 下载 pom xml 文件中列出的 JAR 我怎么做 目前 Maven 想要编译该项目 但失败了 我不关心编译它 因为我是手动编译的 我只想要罐子 帮助 Albert ps 背景 我手动编译它是因为我可以轻松地在Ecli
  • 删除sql server中的大量数据

    假设我有一个有 10000000 条记录的表 这两种解决方案有什么区别 删除数据 例如 DELETE FROM MyTable 使用应用程序逐行删除所有数据 DELETE FROM MyTable WHERE ID SelectedID 第
  • 如何解析使用YUI数据源返回的NULL值

    我正在使用 YUI 数据表和数据源来渲染我的项目之一中的数据 返回的数据恰好为NULL YUI数据源无法解析它 下面是数据源和数据表的声明代码 为了便于阅读 我将每个声明分开 列说明声明 var columnDescription key
  • 在 ASP.NET MVC5 中使用 Ninject 注入实体框架 DbContext

    我刚刚进入依赖注入世界 我有以下自定义 DbContext public partial class SkyTrackerContext DbContext public SkyTrackerContext base Database Se
  • Tensorflow:提要字典错误:您必须为占位符张量提供值

    我有一个错误 我无法找出原因 这是代码 with tf Graph as default global step tf Variable 0 trainable False images tf placeholder tf float32
  • 如何对 Slim 框架应用程序进行单元测试

    我一直在尝试对修改其他人代码的示例进行单元测试 每次我到达测试运行时都没有错误的程度 当我期望它们通过时 我只是遇到相同的失败 网上没有大量文档 我真的不知道还能去哪里 任何人都可以看到我的代码哪里出错了 bootstrap php php