如何使用 Jest 模拟 HTML5 文件对象



我有很多代码传递HTML 5文件对象。 我为它编写了一套测试,但是,由于 File 对象的上次修改日期,它破坏了我的快照测试。

我试图使用:

jest.mock('File', () => {
return class MockFile {
filename: string;
constructor(parts: (string | Blob | ArrayBuffer | ArrayBufferView)[], filename: string, properties?: FilePropertyBag) {
this.filename = filename;
}
}
});

我收到错误,说找不到文件模块(我不需要在使用它的任何地方导入它......

我还尝试扩展文件类并覆盖上次修改的 get 属性,但它似乎没有修复我的快照。

处理这个问题的最佳方法是什么?

您只需要在全局命名空间中设置File

global.File = class MockFile {
filename: string;
constructor(parts: (string | Blob | ArrayBuffer | ArrayBufferView)[], filename: string, properties ? : FilePropertyBag) {
this.filename = filename;
}
}

另一种解决方法是使用 jest.fn 从 jest 嘲笑 File 的返回值

global.File = jest.fn((file, fileName) => ({
name: fileName,
type: fileName.split('.')[1]
}))

最新更新