茉莉花spyon readAsBinaryString方法的FileReader属性

问题描述 投票:0回答:1

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

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

this.reader.readAsBinaryString(file);

这是我的spec文件中的代码:

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

我收到以下错误:

错误::无法找到侦听readAsBinaryString()的对象

angular jasmine karma-jasmine
1个回答
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
  });
© www.soinside.com 2019 - 2024. All rights reserved.