HTML5文件上传的单元测试

Posted

技术标签:

【中文标题】HTML5文件上传的单元测试【英文标题】:Unit test of HTML5 file upload 【发布时间】:2013-06-11 05:37:09 【问题描述】:

有没有办法对使用 html 5 File API 上传文件进行 javascript 单元测试? 例如我有代码:

<form method="POST" enctype="multipart/form-data">
  <input type="file" id="fileselect" name="fileselect[]" multiple="multiple"/>
</form>

<script type="text/javascript">
   function fileSelectHandler(e) 
       var files = e.target.files || e.dataTransfer.files;
       // at this point, files is a FileList object
   

   var fileselect = document.getElementById("fileselect");
   fileselect.addEventListener("change", fileSelectHandler, false);
</script>

所以我想用 javascript 自动化这个,所以我可以对它进行单元测试。所以我需要触发更改事件,并以某种方式传递文件。最后,每个文件都应该是一个 HTML 5 File 对象,具有我想要的自定义路径。

【问题讨论】:

您不能使用 JavaScript 设置 file 输入的值,为此您需要某种浏览器扩展。但是,您为什么要尝试测试浏览器输入的功能,为什么不将文件对象作为测试的一部分? 罗伯特,我的“复杂”代码从文件变量开始,它是一个文件列表。如何使 FileList 成为指向硬盘上实际文件的 File 对象列表? 我已经说过你不能,但即使你可以,如果你选择带有input 元素的文件的测试失败了,这能证明你的应用程序是什么?您是否打算向各个浏览器供应商发送 C++ 补丁? 我的代码比这长得多,它继续使用 File 对象,解析文件,通过 AJAX POST 调用将它们上传到某个服务器等。所以我的目标是我的其余部分javascript 代码,而不是文件的选择。 我还没有找到办法。我还想测试我的上传函数,该函数将接受 File 或 FileList 作为其参数之一。 【参考方案1】:

我不确定这是否会有所帮助,但是将 iMacros 用于 firefox 怎么样?您可以录制一个执行您想要的所有操作的宏,然后按您想要的频率运行它。它非常易于使用,并且适用于我几乎所有的 UI 测试。

iMacros firefox plugin

【讨论】:

以上是关于HTML5文件上传的单元测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 html5 分块上传文件

如何使用 Supertest 对文件上传进行单元测试并发送令牌?

如何在 django 中对文件上传进行单元测试

如何使用 API 平台对 GraphQL 文件上传进行单元测试?

HTML5 文件域+FileReader 分段读取文件并上传到服务器

Vue.Js(html5) + Java实现文件分片上传