javascript - 如何在 e2e AngularJS 测试中上传文件?

标签 javascript testing file-upload angularjs drag-and-drop

在我的一个 View 中,我有一个文件上传控件。它支持通过拖放或单击按钮后打开的标准文件对话框上传文件。

如何在我的端到端测试中做到这一点1


1 两个选项中的一个就够了

最佳答案

您可以使用 Javascript blob 上传文件。这需要与旧浏览器不兼容的 FileApi ( http://caniuse.com/fileapi )。但是既然你提到了使用拖放上传,它使用了 FileApi,那么它应该不会太重要。

您可以通过两种方式使用 blob API 上传文件。一个非常简单,另一个只是第一个的延续。

使用 Javascript,您可以创建一个新的 blob:

var blob = new Blob("content", contentType);

例如,这将创建一个包含文本“Hello World!”的 blob 对象。

var foo = new Blob("Hello World!", {type: "text/plain"});

你也可以使用下面的方法来处理非明文文件,比如pdf。您必须将文件转换为 Base64(您可以使用 this 之类的东西)并使用 Base64 数据创建 blob。

使用此函数(this 的略微修改版本)创建 blob。

function b64toBlob(b64Data, contentType, sliceSize) {
b64Data = b64Data.replace(/\s/g, '');
contentType = contentType || '';
sliceSize = sliceSize || 1024;

function charCodeFromCharacter(c) {
    return c.charCodeAt(0);
}

var byteCharacters = atob(b64Data);
var byteArrays = [];

for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    var slice = byteCharacters.slice(offset, offset + sliceSize);
    var byteNumbers = Array.prototype.map.call(slice, charCodeFromCharacter);
    var byteArray = new Uint8Array(byteNumbers);

    byteArrays.push(byteArray);
}

var blob = new Blob(byteArrays, {type: contentType});
return blob;
}

例如,这将创建一个 PDF blob 对象。

var pdf = "JVBERi0xLjQKJcfsj6IKNSAwIG9...=="; //base64 encoded file as a String
var pdfBlob = b64toBlob(pdf, "application/pdf", 1024);

使用上述方法之一创建 blob 后,可以将其视为文件。例如,您可以将文件放入 FormData 对象中(如果您正在执行类似 this 的上传):

var fd = new FormData();
fd.append("uploadedFile", pdfBlob, "My PDF.pdf"*);

*文件名参数目前似乎只适用于 Chrome。

关于javascript - 如何在 e2e AngularJS 测试中上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13321994/

相关文章:

php - 为老式文件上传添加不显眼的进度条

javascript - 从 meteor mongo 返回数组

php - 使用 php 和 javascript 从弹出窗口返回一个值

php - SUT - 测试内部行为 TDD

php - 文件上传;如何利用 "chunking"?

php - curl PHP 文件上传

javascript - Sencha Touch 2 上 Items[] 内的 tpl

javascript - html 无法加载 javascript?

linux - 如何测试 X 窗口管理器

ruby - Rspec puppet 模块测试: access to included classes' custom facts