jasmine spyon readAsBinaryString method of FileReader proper



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

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

this.reader.readAsBinaryString(file);

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

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

我收到以下错误:

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

你可以像这样模拟全局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();
});

查看此堆栈闪电战演示

编辑

如果在插入方法中调用new FileReader()(在开始时(,则可以在it内部模拟FileReader(或者在方法内部,如果您有多个类似的单元测试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
});

最新更新