2017-05-23 4 views
0

Ich muss ein FileReader Onload testen, mit Jasmine + Sinon. Stubbing eine Methode, die eine echte Methode mit Jasmin ruft

MyObject.prototype.uploadFile = function (file, callback) { 
 
    const fileReader = new FileReader(); 
 

 
    fileReader.onload = event => { 
 
     if (typeof callback === 'function') { 
 
      callback(event); 
 
     } 
 
    }; 
 

 
    fileReader.readAsDataURL(file); 
 
};

Und dies ist der Test:

Dies ist die Funktion getestet werden soll

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(); 
 
     }); 
 
    });

Wie Sie sehen können, stubbed ich readdata aus FileReader (nicht sicher, ob es richtig gemacht wird), aber ich brauche einen Stub Methode, um die tatsächliche Methode eines FileReaders (onload) aufzurufen, um testen zu können.

Ist das möglich?

Antwort

0

Sie haben FileReader falsch gestempelt.

Mit Objektliterale, this ist das, was Kontext der Objektliteral in errichtet wurde.

Sofern verwenden Sie die Kurzschreibweise in es6 eingeführt.

Also, wenn Sie this.onload innerhalb readAsDataURL aufrufen, versucht es nicht, die onload Funktion auf dem Objekt readData aufzurufen.

, das zu tun:

let readData = { 
    readAsDataURL() { 
     this.onload(); 
    }, 
    onload() {} 
}; 
Verwandte Themen