在模拟es6类时,Jest无法读取未定义的属性“实例”

时间:2018-03-29 19:58:05

标签: node.js jestjs

试图模拟ES6类,只是为了得到一个我可以窥探的虚拟模拟。我的代码似乎非常接近文档,但在我的虚拟对象上调用.mock时出现此错误:

  

TypeError:无法读取未定义

的属性“实例”
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)
  })
})

1 个答案:

答案 0 :(得分:0)

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)
  })
})