Javascript 模拟目录文件对象
在JavaScript中,如何创建模拟目录的Javascript 模拟目录文件对象,javascript,html,file,dom,directory,Javascript,Html,File,Dom,Directory,在JavaScript中,如何创建模拟目录的文件(或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
文件
(或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: ""
当我记录目录时,我得到以下信息:
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: ""
唯一的区别似乎是缺少扩展和空的类型
描述如何检测目录。我想模拟一个目录,以便为以下函数编写单元测试:
var isDirectory = function (blob, callback) {
var reader = new FileReader();
reader.addEventListener('load', function () {
callback(false);
});
reader.addEventListener('error', function () {
callback(true);
});
reader.readAsArrayBuffer(blob);
};
我试着给它传递一个
新Blob([])
,因为它也有一个类型
的空字符串,但是回调
仍然是用false
调用的。如果您只想对该函数进行单元测试,您可以简单地模拟JavaScript的文件阅读器
:
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);
});
});
诚然,这对
文件阅读器本身的内部工作做了一定的假设,但表面上它已经被浏览器制造商测试过了,你可以假设它可以像广告一样工作。如果你只想对该函数进行单元测试,你可以简单地模仿JavaScript的文件阅读器
:
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);
});
});
诚然,这对文件阅读器本身的内部工作原理做出了某些假设,但表面上看,浏览器制造商已经对其进行了测试,您可以假设其工作原理是广告化的