【发布时间】:2022-03-16 22:34:03
【问题描述】:
我正在尝试围绕使用“js-file-download”的 React 组件中的下载功能编写测试。在我的测试中,我已经能够以几种方式模拟它:
import fileDownload from 'js-file-download'
jest.mock('js-file-download', () => jest.fn(console.trace))
// or
jest.mock('js-file-download', () => {
return {
__esModule: true,
default: jest.fn(console.trace)
}
})
两者似乎都有效,因为它打印了一个看起来正确的跟踪。然而:
expect(fileDownload).toHaveBeenCalled()
失败:
Expected number of calls: >= 1
Received number of calls: 0
任何人都知道为什么它似乎调用了模拟,但没有注册它被调用?有没有另一种方法来解决这个问题?提前致谢!
【问题讨论】:
-
你执行
fileDownload函数了吗? -
是的,它被导入并发生在被测代码中,并且跟踪表明它正在正确发生。此外,如果我在测试中转储
fileDownload,我检查它是否被称为它是一个模拟对象。但这就像我有两个模拟实例,一个在正在测试的代码中,另一个在测试用例中……这可能吗?但是,如果我尝试做类似的事情。const mockFileDownload = jest.fn(); jest.mock('js-file-download', () => mockFileDownload)我得到ReferenceError: Cannot access 'mockFileDownload' before initialization -
我尝试添加
jest.spyOn(fileDownload, 'default'),但仍然没有注册呼叫。 -
我认为这是一个时间问题。我在代码调用点和测试验证点添加了一些日志记录,验证首先发生,另外我可以在调用点看到 .mock.calls。 'waitFor' 可能会解决问题,但不幸的是,另一个 3rd 方库遇到了麻烦。
-
你能在哪里解决这个问题?我面临同样的问题。 :(
标签: javascript jestjs mocking es6-modules