Symfony2功能测试:直接传递表单数据

2024-04-23

我正在使用 phpunit 来运行功能测试,但我在使用某些表单时遇到问题。问题是 phpunit 不支持 JS,而我有一个带有动态填充选择框的表单,需要 jQuery。

所以我需要直接传递表单数据。 《书》给出了以下例子:

// Directly submit a form (but using the Crawler is easier!)
$client->request('POST', '/submit', array('name' => 'Fabien'));

当我使用这个示例时,控制器没有收到任何表单数据。最初,我发现在我的情况下传递数组键“名称”是不正确的,因为我需要代码中的表单名称“时间表”。所以我尝试了类似的方法:

$client->request('POST', '/timesheet/create', array('timesheet[project]' => '100'));

但这仍然不起作用。在控制器中,我试图了解发生了什么以及如果收到任何东西会怎样:

$postData = $request->request->get('timesheet');
$project = $postData['project'];

这不起作用,$project 仍然是空的。但是,如果我使用以下代码,我得到的值:

$project = $request->request->get('timesheet[project]');

但显然这不是我想要的。至少我可以看到有一些 POST 数据。我的最后一次尝试是在测试方法中尝试以下操作:

$this->crawler = $this->client->request('POST', '/timesheet/create/', array('timesheet' => array(project => '100'));

因此,我尝试传递“时间表”数组作为请求参数数组的第一个元素。但这样我得到了错误:

Symfony\Component\Form\Exception\UnexpectedTypeException: Expected argument of type "array", "string" given (uncaught exception) at /mnt/hgfs/pmt/src/vendor/symfony/src/Symfony/Component/Form/Form.php line 489

如果有人可以扩展“书”中关于我应该如何使其工作的内容,我将非常高兴。

控制器中的表单绑定:

    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);

        if ($form->isValid()) {
            $postData = $request->request->get('timesheet');
            $project = $postData['project'];                             

            $timesheetmanager = $this->get('wlp_pmt.timesheet_db_access');
            $timesheetmanager->editTimesheet($timesheet);                                               
            return $this->redirect($this->generateUrl('timesheet_list'));
        }
    }

如果您想知道如何使用测试客户端注入 POST 数据数组......

在您的测试方法中,执行类似的操作

$crawler = $client->request('POST', '/foo', array(
    'animal_sounds' => array(
        'cow'  => 'moo',
        'duck' => 'quack'
    )
); // This would encode to '/foo?animal_sounds%5Bcow%5D=moo&animal_sounds%5Bduck%5D=quack'

$this->assertTrue( ... );

在控制器中,您可以像这样访问参数:

$data = $request->request->get('animal_sounds');
$cowNoise = $data['cow'];
$duckNoise = $data['duck'];

或者,如果测试方法注入有效的表单数据,您可以只使用表单 API...

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

Symfony2功能测试:直接传递表单数据 的相关文章

随机推荐

  • Response.Redirect 之后的 JavaScriptalert()

    我在后面的代码中调用它 test aspx Response Redirect Default aspx 我想在重定向到 Default aspx 之后 之前添加一个 javascript 警报 这可能吗 我这样做是因为我将一个值传递给另一
  • 如何在 Visual Studio 中开发独特的 GUI? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 All programs that I develop utilize the default Windows Design temp
  • 如何计算两个文本文档之间的相似度?

    我正在考虑使用任何编程语言 尽管我更喜欢 Python 来从事 NLP 项目 我想获取两个文档并确定它们的相似程度 常见的方法是将文档转换为 TF IDF 向量 然后计算它们之间的余弦相似度 任何有关信息检索 IR 的教科书都涵盖了这一点
  • 有没有办法使用 NamedParameterJdbcTemplate 和 generatedKeyHolder 提取主键(或 ROWID)?

    我正在尝试使用 Spring 的 NamedParameterJdbcTemplate 和 generatedKeyHolder 提取 ROWID 或主键 我正在尝试做这样的事情 MapSqlParameterSource paramete
  • 使用 .htaccess 限制对文件下载的访问

    我下载了诸如product exe之类的静态文件 我想限制访问 这些文件带有 htaccess 文件 以便只有某些用户可以下载它 我认为这可以用 mod rewrite 来处理 我在网上找到了这个片段 使用引荐来源网址阻止不良网站 Rewr
  • React-Native iOS - 如何通过按下按钮从 React-Native 视图导航到非 React-Native 视图(本机 iOS 视图控制器)?

    RN doco 和其他示例展示了如何从本机 iOS 视图控制器启动 React Native 视图 但反之则不然 有人可以解释我该怎么做吗 我能够弄清楚这一点 就我而言 我使用 Obj C 基础项目 这是 RN 默认值 和我自己的 Swif
  • Dynamics CRM 2011 - 找不到插件类型

    我正在尝试将插件部署到本地 Dynamics CRM 2011 该插件不执行任何操作 它只是一个空的Execute附加在 Post Process 事件上的方法Account entity 我的插件看起来像这样 namespace CrmD
  • 使用 cscope 在头文件和实现文件之间切换的 Vim 脚本

    我目前使用的是A vim http vim wikia com wiki Easily switch between source and header file在头文件和实现文件之间交换的插件 该脚本的局限性在于 它仅在两者位于同一文件夹
  • 开发期间初始安装标签的使用和验证

    我正在尝试在我们的应用程序中使用 ODR 并创建了标签并将其分组在 预取 下的 初始安装标签 选项下 我不确定如何使用开发配置文件在模拟器和设备上验证这一点 TestFlight 是验证初始安装标签使用情况的唯一选项吗 即使对于标记为初始安
  • websocket握手问题

    我正在使用 python 实现一个简单的 websocket 服务器 我使用的握手来自 握手本身似乎有效 但是当我点击发送时 我收到一个 JavaScript 错误 未捕获的错误 INVALID STATE ERR DOM 异常 11 这是
  • 使用易失性变量和信号量 - Java

    我从线程 信号量 易失变量等开始 我想知道当我使用信号量时是否有必要将变量定义为易失性 我的意思是 有 2 个线程 一个增加变量 另一个减少变量 例如 显然 在每次访问之前 我有一个互斥体 它随时控制只有一个线程正在 玩 变量 有必要定义为
  • 如何在java中排队并调用实际方法(而不是立即评估)?

    有一个对时间敏感的任务列表 但在这种情况下 时间 对于另一个程序告诉我的内容是任意的 它更像是 滴答声 而不是时间 但是 我不希望立即评估所述方法 我希望一个在另一个完成后执行 我在队列中使用链表 但我不确定如何 是否可以访问类中的实际方法
  • 为什么querySkuDetails需要在IO上下文中运行?

    根据https developer android com google play billing integrate https developer android com google play billing integrate th
  • 没有可判定的相等性或排除中间值的鸽巢证明

    在软件基础中IndProp v https softwarefoundations cis upenn edu lf current IndProp html lab244一个人被要求证明鸽巢原理 并且可以使用排除中间 但有人提到这并不是绝
  • 提交后用成功消息替换 HTML 表单,表单使用单独的 php 文件发送邮件

    我有一个内置于index html 中的html 联系表单 然后我有一个mail php 文件 用于发送邮件并使用一些Javascript 当我填写表单并提交时 我已对其进行编码以发送邮件 然后弹出一个成功消息框 然后重定向回index h
  • 从 C 中的路径中分割文件名

    我是 C 新手 但精通 Python 我正在寻找 C 中 string split 1 函数的功能等效项 到目前为止 我已经能够创建一个包含我的整个路径的字符数组 我想分割该字符串 所以我只有文件名 下面我提供了一个示例 char inpu
  • ERRORLEVEL 与 %ERRORLEVEL% 与感叹号 ERRORLEVEL 感叹号

    我想我对 ERRORLEVEL 与 ERRORLEVEL 有基本的了解 但是 ERRORLEVEL 让我困惑 我正在制作一个调用可执行文件的脚本 然后使用任务列表来查看它是否正在运行 然后使用taskkill来杀死它 如果是 然后尝试输出错
  • 如何在 Objective-C 的 switch 语句中使用 goto?

    在我的代码中 我需要能够在同一个 switch 语句中跳转 转到 不同的情况 有没有办法做到这一点 我的代码是这样的 有很多代码我都省略了 switch viewNumber case 500 break case 501 break ca
  • MATLAB - 函数的多个返回值?

    我正在 matlab 中编写 2 个函数 一个初始化函数和一个将项目插入数组的函数 将其视为双向链表 但是 我的初始化函数仅返回 ans 和初始化的数组 我怎样才能让它也设置其他变量的值 这是我的代码 function array list
  • Symfony2功能测试:直接传递表单数据

    我正在使用 phpunit 来运行功能测试 但我在使用某些表单时遇到问题 问题是 phpunit 不支持 JS 而我有一个带有动态填充选择框的表单 需要 jQuery 所以我需要直接传递表单数据 书 给出了以下例子 Directly sub