茉莉花香的FileReader属性的readAsBinaryString方法

时间:2018-09-04 15:31:27

标签: angular jasmine karma-jasmine

我有一个使用FileReader的函数。我想监视 readAsBinaryString 方法。

在我的组件中,我具有以下属性reader: FileReader; 另外,在insert方法中,我有以下语句:

this.reader.readAsBinaryString(file);

这是我的规范文件中的代码:

  fit('', () => {
    const e: any = {
        ...
      }
    };
    const readerSpy = spyOn(catalog.reader, 'readAsBinaryString');
    catalog.insert(e);
    expect(readerSpy).toHaveBeenCalled();
  });

我收到以下错误:

  

错误::找不到要监视的对象   readAsBinaryString()

1 个答案:

答案 0 :(得分:0)

您可以像这样模拟全局FileReader

    const mockReader: FileReader = jasmine.createSpyObj('FileReader', ['readAsBinaryString']);
    spyOn(window as any, 'FileReader').and.returnValue(mockReader);

然后在您的单元测试中,它应该可以按预期工作:

  it('test', () => {
    ...
    catalog.insert(someMockData);
    expect(catalog.reader.readAsBinaryString).toHaveBeenCalled();
  });

选中此stackblitz demo

修改

如果您在插入方法中(开始时)调用new FileReader(),则可以在FileReader内部(或it方法中模拟beforeEach(如果有)多个相似的单元测试):

  it('test', () => {
    const mockReader: FileReader = jasmine.createSpyObj('FileReader', ['readAsBinaryString']);
    spyOn(window as any, 'FileReader').and.returnValue(mockReader);
    // other mocks

    catalog.insert(someMockData);

    expect(catalog.reader.readAsBinaryString).toHaveBeenCalled();
    // other expects
  });