gpt4 book ai didi

javascript - 模拟目录File对象

转载 作者:行者123 更新时间:2023-11-28 07:08:36 25 4
gpt4 key购买 nike

在 JavaScript 中,如何创建模拟目录的 File(或 Blob)对象?

在 Chrome 43 上,当我记录拖入上传表单的图像文件时,我得到以下信息:

lastModified: 1426770718000
lastModifiedDate: Thu Mar 19 2015 06:11:58 GMT-0700 (PDT)
name: "Cornered.jpg"
size: 261343
type: "image/jpeg"
webkitRelativePath: ""

当我记录目录时,我得到:

lastModified: 1426770841000
lastModifiedDate: Thu Mar 19 2015 06:14:01 GMT-0700 (PDT)
name: "contest"
size: 476
type: ""
webkitRelativePath: ""

唯一的区别似乎是缺少扩展名和空的类型

This answer描述如何检测目录。我想模拟一个目录,以便可以为以下函数编写单元测试:

var isDirectory = function (blob, callback) {
var reader = new FileReader();
reader.addEventListener('load', function () {
callback(false);
});
reader.addEventListener('error', function () {
callback(true);
});
reader.readAsArrayBuffer(blob);
};

我尝试向它传递一个new Blob([]),因为它也有一个类型空字符串,但是回调 仍以 false 调用。

最佳答案

如果您只想对该函数进行单元测试,您可以简单地模拟 JavaScript 的 FileReader:

    describe('isDirectory', function () {
var OriginalFileReader,
MockFileReader = function () {
this.callbacks = {};
mockFileReaderInstance = this;
},
mockFileReaderInstance;

MockFileReader.prototype = {
addEventListener: function (event, callback) {
this.callbacks[event] = callback;
},
readAsArrayBuffer: angular.noop
};

beforeEach(function () {
OriginalFileReader = window.FileReader;
window.FileReader = MockFileReader;
});
afterEach(function () {
window.FileReader = OriginalFileReader;
});

it('should indicate false when object is not a directory', function () {
var spy = jasmine.createSpy('spy');

fileUtilities.isDirectory({}, spy);
mockFileReaderInstance.callbacks.load();

expect(spy).toHaveBeenCalledWith(false);
});

it('should indicate true when object is a directory', function () {
var spy = jasmine.createSpy('spy');

fileUtilities.isDirectory({}, spy);
mockFileReaderInstance.callbacks.error();

expect(spy).toHaveBeenCalledWith(true);
});
});

当然,这对 FileReader 本身的内部工作原理做出了某些假设,但表面上它已经过浏览器制造商的测试,您可以假设它的工作原理与广告中的一样。

关于javascript - 模拟目录File对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com