试过所有的例子,但似乎都没有效果,最有希望的例子是下面的例子,但实际上它也不起作用。我希望实现的是使用除writeZip和updateFile以外的所有常规的writeZip函数,这些函数应该被模仿,并将使用它们的间谍进行检查。
但是目前我得到的错误是admZip.getEntries()不是一个函数,所以我的模拟的actual部分似乎是错误的,有什么提示我如何在模拟中得到实际的getEntries-method吗?
jest.mock('adm-zip', () => {
const actual = jest.requireActual('adm-zip');
return function(): AdmZip {
return {
...actual, // <--- was hoping this will integrate the other original methods like getEntries()
writeZip: jest.fn(),
updateFile: jest.fn()
}
}
});另一种办法是:
jest.mock('adm-zip', () => {
const actual = jest.requireActual('adm-zip');
return jest.fn().mockImplementation(() => ({
...actual,
writeZip: jest.fn(),
updateFile: jest.fn()
}))
});完全是随机的
jest.mock('adm-zip', () => {
const actual = jest.requireActual('adm-zip');
return {
__esModule: true,
...actual,
AdmZip: jest.fn().mockImplementation(() => {
return {
...jest.requireActual('adm-zip'),
writeZip: jest.fn(),
updateFile: jest.fn()
}
})
}
});发布于 2022-07-01 18:06:22
不确定纯粹的玩笑版本会是什么,但我用另一个包实现了“部分模拟”:MockProxy from jest-mock-extended
首次进口:
import { mock, MockProxy } from 'jest-mock-extended';然后,只定义要实际执行的方法:
const admZip: MockProxy<AdmZip> = mock<AdmZip>({
getEntries: new AdmZip(path.join('./apps/backend/test/data/unittest/sample-ibans.zip')).getEntries,
});然后,我们使用MockProxy作为实际zip读取方法的返回:
jest.spyOn(FileHandler, 'createAdmZip').mockResolvedValue(admZip);现在我们可以通过读取实际的zip来测试所有zip功能,但是所有的写和更新函数仍然是模拟的,所以zip不会被更改,但是代码仍然在运行。
现在所有的方法都是模拟的,除了getEntries,因为AdmZip是一个类,我们不得不硬编码我们的压缩文件路径,但是您可以用方法重新创建模拟,并随时更改路径。所以这就是我的“解决办法”
https://stackoverflow.com/questions/72736277
复制相似问题