我需要使用Jasmine + Sinon测试FileReader的onload。
这是要测试的功能:
MyObject.prototype.uploadFile = function (file, callback) {
const fileReader = new FileReader();
fileReader.onload = event => {
if (typeof callback === 'function') {
callback(event);
}
};
fileReader.readAsDataURL(file);
};

这是测试:
describe('uploadFile', () => {
it('should execute the callback', () => {
let testFunction = jasmine.createSpy();
let readData = {
readAsDataURL: () => {
this.onload();
},
onload: () => {
}
};
file = new Blob(['image']);
sandbox.stub(window, 'FileReader').returns(readData);
component = sandbox.render(BioProfile);
component.replaceImage(file, testFunction);
expect(testFunction).toHaveBeenCalled();
});
});

正如您所看到的,我在FileReader中存根readData(不确定是否正确完成),但我需要一个存根方法来调用FileReader的实际方法(onload)才能测试。
这可能吗?
答案 0 :(得分:1)
您错误地记录了SVM
。
使用对象文字,FileReader
是构造对象文字的任何上下文。
除非使用this
中引入的速记符号。
因此,当您在es6
内拨打this.onload
时,它不会尝试调用readAsDataURL
对象上的onload
函数。
要做到这一点:
readData