• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Jasmine Test für File-reader

uthred

New member
Guten Tag,

Ich versuche gerade für eine Webanwendung, dem User zu ermöglichen, eigene Dateien hochzuladen und auswerten zu lassen...
Das funktioniert auch prima, aber dies zu testen gestaltet sich schwierig.

Es muss ein JavaScript Unit test her, in Jasmine syntax. (Das Snippet basiert teilweise auf Angular (Methodenaufruf))
HTML:
<input type="file" name="file" id="fileinput" onchange="angular.element(this).scope().uploadFile(this.files)" />
Code:
$scope.uploadFile = function (files) {
    try {
        var message = "",
            file = files[0],
            filereader = new FileReader();
        filereader.onload = (function (theFile) {
            return function (result) {
                var data;
                try {
                    // TODO test
                    console.log("filereader onload called");
                    var string = window.atob((result.target.result).replace("data:application/octet-stream;base64,", "").replace("data:;base64,", ""));
                    data = JSON.parse(string);
                    localStorage.setItem("configCache", string);
                    $scope.renderData(data);
                } catch (e) {
                    // TODO test
                    console.error("Error: " + e);
                }
            };
        })(file);
        filereader.readAsDataURL(file);
        document.getElementById('fileinput').addEventListener('change', readSingleFile, false);
    } catch (e) {
        console.error("Error: " + e);
    }
};

Jasmine-Test:
Code:
describe('$scope.uploadFile method testing', function () {
    var eventListener;
    beforeEach(function () {
        eventListener = jasmine.createSpy();
        spyOn(windowMock, "FileReader").and.returnValue({
            addEventListener: eventListener,
            onload: function (file) {
                return true;
            }
        });
    });
    it("should set the file contents correctly", function () {
        $_scope.uploadFile(["data/testData.json"]);
        expect(windowMock.FileReader).toHaveBeenCalled();
        expect(windowMock.FileReader.readAsDataURL).toHaveBeenCalled();
        if (windowMock.FileReader.readAsDataURL) {
            console.log("echo!");
        }
        windowMock.FileReader.onload();
    });
});
 
Zurück
Oben