当FileReader触发加载事件时,如何测试是否调用了事件hanlder

时间:2019-01-22 19:17:49

标签: typescript jasmine

在一种方法中,我正在使用FileReader来读取文件。我想一旦文件异步加载,FileReader就会触发load事件。

handleFileSelect(files:ArrayLike<File>){
...
      reader.onload = this.handleReaderLoaded;


      reader.readAsDataURL(file);
    }
  }

我想测试是否调用了handleReaderLoaded,但无法在Jasmine中编写规范。

到目前为止我写的规范是

fit('should create a thumbnail of the image file selected', () => {
    let newPracticeQuestionComponent = component;

    let file1 = new File(["foo1"], "foo1.txt");//create file
    spyOn(newPracticeQuestionComponent,'handleReaderLoaded')//this is the load event handler 
    newPracticeQuestionComponent.handleFileSelect([file1]);//handleFileSelect will create FileReader and will also start file load operation 
    expect(newPracticeQuestionComponent.handleReaderLoaded).toHaveBeenCalled();




  });

该规范失败,原因为Expected spy handleReaderLoaded to have been called.。我猜是因为文件加载是异步的并且规范在加载事件触发之前完成而发生错误。如何使规范等待load事件被触发。

1 个答案:

答案 0 :(得分:0)

正确的方法似乎是使用done的{​​{1}}方法,它可能会指示JAsmine等待

Jasmine