任何人都可以在这里提供帮助。我对mockImplementation
的工作方式感到非常沮丧。
因此,首先,我使用Jest进行节点测试。我正在使用commonjs模块。我想做的是,我想根据此处的https://jestjs.io/docs/en/es6-class-mocks#replacing-the-mock-using-mockimplementation-docs-en-mock-function-api-mockfnmockimplementationfn-or-mockimplementationonce-docs-en-mock-function-api-mockfnmockimplementationoncefn.
我的代码如下:
const exportBigQueryTableModule =require('../repository/exportBigQueryTable')
jest.mock('../repository/exportBigQueryTable')
describe('deleting files on table export fail', () => {
mockExportBigQueryTable = jest
.fn(() => Promise.resolve())
.mockResolvedValueOnce()
.mockRejectedValueOnce(new Error('Could not export table'))
exportBigQueryTableModule.mockImplementation(mockExportBigQueryTable)
it(' should do some test', () => {})
})
这里的问题是,看起来这行jest.mock('../repository/exportBigQueryTable')
为我创建了一种默认的模拟类型jest.fn()
,并且模块始终使用该默认函数加载。因此,我在使用mockImplementation
的测试中提供的模拟函数永远不会覆盖前一个函数,在这里我没有得到什么问题。为什么在正式文档中使用相同的示例,唯一的区别是它在doc示例中使用了es6模块。
我不确定我是否在这里遗漏了一些东西。