Javascript 如何在e2e AngularJS测试中上传文件?
在我的一个视图中,我有一个文件上载控件。它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 如何在e2e测试中执行此操作1Javascript 如何在e2e AngularJS测试中上传文件?,javascript,testing,file-upload,angularjs,drag-and-drop,Javascript,Testing,File Upload,Angularjs,Drag And Drop,在我的一个视图中,我有一个文件上载控件。它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 如何在e2e测试中执行此操作1 1两个选项中的一个就足够了您可以使用Javascript blob上传文件。这需要FileApi,它与旧浏览器()不兼容。但是,既然您提到使用拖放上传,即使用FileApi,那就没什么大不了的了 有两种方法可以使用blobapi上传文件。一个很简单,另一个只是第一个的延续 使用Javascript,您可以创建一个新的blob,包括: var blob = new Bl
1两个选项中的一个就足够了您可以使用Javascript blob上传文件。这需要FileApi,它与旧浏览器()不兼容。但是,既然您提到使用拖放上传,即使用FileApi,那就没什么大不了的了 有两种方法可以使用blobapi上传文件。一个很简单,另一个只是第一个的延续 使用Javascript,您可以创建一个新的blob,包括:
var blob = new Blob("content", contentType);
例如,这将创建一个包含文本“Hello World!”的blob对象
对于非纯文本文件,如pdf,也可以使用以下方法。您必须将文件转换为Base64(您可以使用类似的内容),并使用Base64数据创建blob 使用此函数(稍加修改的版本)创建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;
}
使用上述方法之一创建blob后,可以将其视为文件。例如,您可以将文件放入FormData对象中(如果您像这样进行上载):
*Filename参数目前似乎只在Chrome上起作用。您到底需要测试哪部分功能?这是正确的拖放行为还是仅仅是文件上传?通过AJAX发送一个文件(例如,
new file()
)就足够了吗?我只需要上传一个文件(使用一个真实的文件),这样我就可以继续我的其他测试。因此,通过AJAX发送一个真实的文件是可行的,而发送一个使用new file()创建的空文件则不行。如果有帮助,该文件是一个xml文件,如果有办法,我可以在测试代码中创建该文件。如何编写端到端测试?支持。
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;
}
var pdf = "JVBERi0xLjQKJcfsj6IKNSAwIG9...=="; //base64 encoded file as a String
var pdfBlob = b64toBlob(pdf, "application/pdf", 1024);
var fd = new FormData();
fd.append("uploadedFile", pdfBlob, "My PDF.pdf"*);