我有一个使用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()
答案 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();
});
修改
如果您在插入方法中(开始时)调用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
});