gpt4 book ai didi

php - 在不调用 click() 的情况下在 symfony 中进行文件上传功能测试

转载 作者:搜寻专家 更新时间:2023-10-31 21:46:28 25 4
gpt4 key购买 nike

我似乎无法通过 sfTestFunctional 的 post() 方法对文件上传执行功能测试。我处理 HTTP post 的操作能够获取除文件上传字段之外的所有参数。

查看 Symfony 1.4 的源代码,我认为 sfBrowserBase 仅通过 click() 方法(特别是 doClickElement())处理文件上传。这是通过功能测试“上传”文件的唯一方法吗?

顺便说一句,我问这个是因为我没有任何表示要提交的数据的 HTML 表单,它是 REST API 的一部分。如果功能测试必须“click()”,那么我只需要用所需的 html 表单元素创建虚拟 html 页面。

最佳答案

我找到了这个:http://www.devcomments.com/Uploads-on-functional-test-for-REST-services-to189066.htm#filtered

但是我不得不稍微修改它以便让它与 Symfony 1.4 一起工作。作为形式问题,我引入了一个新类“浏览器”,它扩展了“sfBrowser”和“TestFunctional”,它扩展了“sfTestFunctional”。

浏览器::上传文件():

我为content-type添加了一个$type参数,否则测试失败('invalid mime-type')


public function uploadFile($fieldName, $filename, $type = '')
{
if (is_readable($filename))
{
$fileError = UPLOAD_ERR_OK;
$fileSize = filesize($filename);
}
else
{
$fileError = UPLOAD_ERR_NO_FILE;
$fileSize = 0;
}

$this->parseArgumentAsArray($fieldName, array('name' => basename($filename), 'type' => $type, 'tmp_name' => $filename, 'error' => $fileError, 'size' => $fileSize), $this->files);

return $this;
}

测试函数::上传文件()


public function uploadFile($fieldName, $filename, $type = '')
{
$this->browser->uploadFile($fieldName, $filename, $type);

return $this;
}

你必须注意命名:


$browser = new TestFunctional(new Browser());
$browser->

uploadFile('article_image[image]', '/path/to/your/image.gif', 'image/gif')->

post('/articles/1/images.json', array('article_image' => array(
'title' => 'foobar',
'description' => 'lorum ipsum'
)))

;

关于php - 在不调用 click() 的情况下在 symfony 中进行文件上传功能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2715659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com