我有一个使用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()的对象
你可以像这样模拟全球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
});