gpt4 book ai didi

javascript - 如何在 Jasmine 中编写 FileReader 测试?

转载 作者:技术小花猫 更新时间:2023-10-29 12:10:37 26 4
gpt4 key购买 nike

我正在努力使这个测试工作,但我无法理解如何使用 FileReader 编写测试。这是我的代码


function Uploader(file) {
this.file = file;
}

Uploader.prototype = (function() {

function upload_file(file, file_contents) {
var file_data = new FormData()
file_data.append('filename', file.name)
file_data.append('mimetype', file.type)
file_data.append('data', file_contents)
file_data.append('size', file.size)

$.ajax({
url: "/upload/file",
type: "POST",
data: file_contents,
contentType: file.type,
success: function(){

// $("#thumbnail").attr("src", "/upload/thumbnail");

},
error: function(){
alert("Failed");
},
xhr: function() {
myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){
myXhr.upload.addEventListener('progress',showProgress, false);
} else {
console.log("Upload progress is not supported.");
}
return myXhr;
}
});
}

return {
upload : function() {
var self = this,
reader = new FileReader(),
file_content = {};

reader.onload = function(e) {
file_content = e.target.result.split(',')[1];

upload_file(self.file, file_content);
}
}
};
})();


这是我的测试


describe("Uploader", function() {
it("should upload a file successfully", function() {
spyOn($, "ajax");
var fakeFile = {};

var uploader = new Uploader(fakeFile);
uploader.upload();

expect($.ajax.mostRecentCall.args[0]["url"]).toEqual("/upload/file");
})
});

但它永远不会到达 reader.onload

最佳答案

这里的问题是 reader.onload 的使用很难测试。您可以改用 reader.addEventListener,这样您就可以监视全局 FileReader 对象并返回一个模拟:

eventListener = jasmine.createSpy();
spyOn(window, "FileReader").andReturn({
addEventListener: eventListener
})

然后你可以自己触发 onload 回调:

expect(eventListener.mostRecentCall.args[0]).toEqual('load');
eventListener.mostRecentCall.args[1]({
target:{
result:'the result you wanna test'
}
})

关于javascript - 如何在 Jasmine 中编写 FileReader 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212348/

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