Eri*_*del 33 javascript tdd html5 unit-testing jasmine
我正在开发一些小项目来锻炼我的TDD技能.该项目包括一个音频播放器,它能够拖放播放列表中的文件.我正在使用Jasmine作为测试框架.我遇到的问题是我无法模拟javascript文件来测试我的文件上传功能.我试图像这样创建一个文件:
new File(new Blob(), "name");
Run Code Online (Sandbox Code Playgroud)
但Chrome不允许手动创建文件.File的构造函数是非法的.我找到了一个grunt.js的解决方案,它包含从grunt返回一些文件,但我真的不想在服务器端使用这么小的测试项目.这个问题有解决方法吗?
Chr*_*ber 51
Chrome会让您创建一个新文件:
var f = new File([""], "filename", { type: 'text/html' });
Run Code Online (Sandbox Code Playgroud)
但IE11(和其他浏览器?)不会.
这是我的(可怜?)假文件:
var blob = new Blob([""], { type: 'text/html' });
blob["lastModifiedDate"] = "";
blob["name"] = "filename";
var fakeF = blob;
Run Code Online (Sandbox Code Playgroud)
您可以根据需要填写值.你可以用你需要的任何东西填充blob.(有关如何使用图像,请参阅其他答案).
我在IE11,Chrome和Firefox中测试了这个.到目前为止,我似乎工作,至少我的单元测试目的.
额外奖励:这是打字稿:
let blob = new Blob([""], { type: 'text/html' });
blob["lastModifiedDate"] = "";
blob["name"] = "filename";
let fakeF = <File>blob;
Run Code Online (Sandbox Code Playgroud)
这是我创建一个虚拟 pdf 文件以供使用的方法pdf.js
创建文件的 base64 字符串。base64我在 shell 中使用命令。
base64 < src/mockData/dummy.pdf
#outputs something like: VEhJUyBJUyBUSEUgQU5TV0VSCg==
Run Code Online (Sandbox Code Playgroud)将此字符串复制到您的源代码中。
const dataBase64 = "VEhJUyBJUyBUSEUgQU5TV0VSCg==";
//note this not a pdf, but for demo purposes because a pdf file is too big
Run Code Online (Sandbox Code Playgroud)解码base64并创建文件
const arrayBuffer = Uint8Array.from(window.atob(dataBase64), c => c.charCodeAt(0));
const file = new File([arrayBuffer], "dummy.pdf", {type: 'application/pdf'});
Run Code Online (Sandbox Code Playgroud)