用.mockImplemetation实现Jest模拟模块

时间:2019-11-14 16:03:33

标签: javascript node.js unit-testing jestjs commonjs

任何人都可以在这里提供帮助。我对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.

尝试使用mockImplementation()模拟模块并在不同测试之间更改其实现。

我的代码如下:

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模块。

我不确定我是否在这里遗漏了一些东西。

0 个答案:

没有答案
相关问题