嘲笑 es6 类时,Jest 无法读取未定义的属性“实例”

Aft*_*ess 8 node.js jestjs

尝试模拟 ES6 类,只是为了获得一个我可以监视的虚拟模拟。我的代码似乎非常严格地遵循文档,但是在调用.mock我的虚拟对象时出现此错误:

类型错误:无法读取未定义的属性“实例”

jest.mock('../../../adapters/Cache')
const Fizz = require('../Fizz')
const Cache = require('../../../adapters/Cache')

const fizz = new Fizz()

describe('CACHE', () => {
  it('should return a mock', () => {
    //This is the line that fails
    const mockCache = Cache.mock.instances[0]

    const mockRetrieveRecords = mockCache.retrieveRecords
    fizz.doStuff()
    expect(mockRetrieveRecords).toHaveBeenCalledTimes(1)
  })
})
Run Code Online (Sandbox Code Playgroud)

And*_*rle 2

jest.mock('../../../adapters/Cache')将仅使用 来模拟模块undefined。要模拟返回类的模块,您可以创建一个仅返回一个返回模拟实例的函数的模拟。要设置使retrieveRecords您可以在测试中访问的间谍,您必须使用空间谍模拟模块,导入它并设置真正的模拟:

jest.mock('../../../adapters/Cache', () => jest.fn())
const Cache = require('../../../adapters/Cache')
const Fizz = require('../Fizz')

const retrieveRecords = jest.fn()
Cache.mockImplementation(() => ({retrieveRecords})



describe('CACHE', () => {
  it('should return a mock', () => {
    const fizz = new Fizz()
    fizz.doStuff()
    expect(retrieveRecords).toHaveBeenCalledTimes(1)
  })
})
Run Code Online (Sandbox Code Playgroud)