Подтвердить что ты не робот

Как выполнить загрузку файла в тестах e2e AngularJS?

В одном из моих представлений у меня есть контроль загрузки файлов. Он поддерживает загрузку файлов либо с помощью перетаскивания, либо через стандартное диалоговое окно файла, открытое после нажатия кнопки.

Как это сделать в моих тестах e2e 1?


1 Достаточно одного из двух вариантов

4b9b3361

Ответ 1

Вы можете загружать файлы с помощью Javascript blob. Для этого требуется FileApi, который несовместим со старыми браузерами (http://caniuse.com/fileapi). Но поскольку вы упомянули использование перетаскивания, которое использует FileApi, это не должно иметь большого значения.

Существует два способа загрузки файлов с помощью API-интерфейса blob. Один из них очень прост, а другой - просто продолжение первого.

Используя Javascript, вы можете создать новый blob с помощью:

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

Например, это создаст объект blob, содержащий текст "Hello World!".

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

Вы также можете использовать следующий метод для файлов без текста, таких как pdf. Вы должны преобразовать файл в Base64 (вы можете использовать что-то вроде this) и создать blob с использованием данных Base64.

Используйте эту функцию (слегка измененную версию 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;
}

Например, это создаст объект blob PDF.

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.