使用jasmine调用一个调用实际方法的方法

时间:2017-05-23 22:42:27

标签: testing jasmine filereader sinon

我需要使用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)才能测试。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您错误地记录了SVM

使用对象文字,FileReader是构造对象文字的任何上下文。

除非使用this中引入的速记符号。

因此,当您在es6内拨打this.onload时,它不会尝试调用readAsDataURL对象上的onload函数。

要做到这一点:

readData