我有一个使用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
});